下面是我正在使用的代码片段,我无法获得所需文件的用户名和组名。
#!/usr/bin/perl
use strict;
use Data::Dumper;
use File::stat;
$somedir = '/var/vob/icc_shantesh/';
$file = $somedir."power.log";
my $gid = stat($file1)->gid;
my $uid = stat($file1)->uid;
print "User Id : $uid Group Id : $gid";
ouptut:用户
我的任务是为系统上的所有用户列出用户所属的所有组。其想法是通过/etc/passwd,为每个用户打印自己的组。
编辑这个做了一个窍门:
if( getgrouplist(passwd->pw_name, passwd->pw_gid,
groups, &ngroups) < 0)
error_fatal ("getgrouplist ()");
但我还是很好奇它不起作用的原因。
输出:
User root is a member of: root
User daemon is a member of: roo
我正在Unix上实现(ls)命令,同时学习一本书。在用(-l)标志实现命令的编码部分期间,我看到必须提示文件的用户名和组名。到目前为止,我从以下几行获得了用户和组I:
struct stat statBuf;
statBuf.st_uid; //For the user id.
statBuf.st_gid; //For the group id.
在Unix上的默认(ls)命令中,文件信息的打印方式是显示用户名而不是用户id。
有人能帮我找到正确的方法从他们的ID中检索用户名和组名吗?
在学习C时,我正在编写一个find的克隆。在实现-ls选项时,我偶然发现了一个问题,getpwuid_r和getgrgid_r调用非常慢,getpwuid和getgrgid也是如此。我需要他们从stat.h提供的ids中显示用户/组名。
例如,列出整个文件系统的速度慢了3倍:
# measurements were made 3 times and the fastest run was recorded
# with getgrgid_r
time ./myfind / -ls > list.txt
real 0m4.618s
user 0m1.848s
sys