根据这个网站我可以简单地写
$user = getlogin();
Run Code Online (Sandbox Code Playgroud)
但是组处理函数似乎无法接受用户名/ userid作为参数.我是否应该遍历所有/ etc/group文件行并从中解析组名?
不需要解析系统文件,在类UNIX操作系统上我会使用内置接口来访问getpwuid和getgrgid系统:
use strict;
use warnings;
# use $< for the real uid and $> for the effective uid
my ($user, $passwd, $uid, $gid ) = getpwuid $< ;
my $group = getgrgid $gid ;
printf "user: %s (%d), group: %s (%d)\n", $user, $uid, $group, $gid;
Run Code Online (Sandbox Code Playgroud)
比较简单的东西
my $group = getgrgid $(
Run Code Online (Sandbox Code Playgroud)
也可以,因为$(和$)已经应该包含GID和EGID.
最后是POSIX模块中定义的getgroups函数,
use POSIX qw(getgroups)
Run Code Online (Sandbox Code Playgroud)
正如dsw所建议的那样,如果您的操作系统(例如Linux不同)支持同时拥有多个活动组,那么还应允许您获取辅助组.
查找非活动的辅助组可能确实涉及解析/ etc/group文件,直接或通过getgrend内置和标准User :: grent模块的组合使用.
| 归档时间: |
|
| 查看次数: |
2332 次 |
| 最近记录: |