运行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
这个文件/目录有什么问题?
答案 0 :(得分:2)
检查getpwuid和getgrgid的返回值。您没有对stat函数进行基本错误检查。尽可能多地进行错误检查。假设没有任何作用。
答案 1 :(得分:2)
在ls
输出中,请注意您拥有所有者/群组daemon 9007206
。
这意味着uid
在[{1}} [或等效]中找到getpwuid
{/ 1}}。
但该群组 找不到<{1}} - 这会在/etc/passwd
[或等效]中返回getgrgid
]。
NULL
处理此问题并打印/etc/group
的数值。
旁注: ls
对我来说似乎有些麻烦。