【问题标题】:C get owner and group of file/directoryC 获取文件/目录的所有者和组
【发布时间】:2016-07-04 08:15:23
【问题描述】:

我在运行 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 - 守护进程 9007206 Apr 29 00:03 ./Test/test.txt

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

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

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

【问题讨论】:

  • 显示的输出是否与显示的代码匹配?我对此表示怀疑。

标签: c linux owner


【解决方案1】:

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

这意味着uid 是在/etc/passwd [或等效] 中[由getpwuid] 找到的。

但是没有找到该组 [by getgrgid--这将返回 NULL] 在 /etc/group [或等效]。

ls 处理了这个并打印了gid 的数值。

旁注: 9007206 对我来说似乎有点古怪。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    猜你喜欢
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2015-10-22
    相关资源
    最近更新 更多