C获取文件/目录的所有者和组

时间:2016-03-17 19:17:14

标签: c linux owner

运行C程序时出现错误分段错误。这是我的代码示例,以获取file/directory的所有者和组:

    struct stat sb;
    char outstr[200];

    stat(file_or_dir_name, &sb);

    struct passwd *pw = getpwuid(sb.st_uid);
    struct group  *gr = getgrgid(sb.st_gid);

    printf("%s %s\n", pw->pw_name, gr->gr_name);

代码多次遍历目录,但是在一个文件中我在pw->pw_name处收到错误。某些files/directories可能没有所有者,或者为什么我可以获得"Segmentation fault"

更新: 错误检查后,我得到了以下结果(如find中的-ls):

  

119 0 --- xrwxr-- 91 - daemon 9007206 Apr 29 00:03 ./Test/test.txt

     

119 0 --- xrwxr-- 91 - 守护进程9007206 4月29日00:03 ./Test/Test2

     

119 0 --- xrwxr-- 91 - 守护进程9007206 4月29日00:03 ./Test/Test2/test2.txt

这个文件/目录有什么问题?

2 个答案:

答案 0 :(得分:2)

检查getpwuid和getgrgid的返回值。您没有对stat函数进行基本错误检查。尽可能多地进行错误检查。假设没有任何作用。

答案 1 :(得分:2)

ls输出中,请注意您拥有所有者/群组daemon 9007206

这意味着uid在[{1}} [或等效]中找到getpwuid {/ 1}}。

但该群组 找不到<{1}} - 这会在/etc/passwd [或等效]中返回getgrgid]。

NULL处理此问题并打印/etc/group的数值。

旁注: ls对我来说似乎有些麻烦。