【发布时间】:2022-01-21 17:31:51
【问题描述】:
基本上我的代码是这样的:
int main(int ac, char **av) {
char *dir_name = get_dir_name(ac, av);
DIR *dir;
struct dirent *entry;
t_stat rd_stat;
dir = opendir(dir_name);
if (!dir) {
perror("diropen");
exit(EXIT_FAILURE);
}
t_group *group_info;
while ((entry = readdir(dir)) != NULL) {
if (lstat(entry->d_name, &rd_stat) == -1) {
perror("lstat");
exit(EXIT_FAILURE);
}
if ((group_info = getgrgid(rd_stat.st_gid)) == NULL) {
perror("getgrgid() error");
}
printf(%s\n", group_info);
}
closedir(dir);
}
我在尝试将组 id 解码为 char* 类型时遇到错误:
getgrgid() 错误:未定义错误:0
我不知道为什么这不起作用,因为用户 id 一切正常
【问题讨论】:
-
未找到匹配组不被视为错误,因此不会设置
errno。 -
在这种情况下它只返回
NULL。 -
当您在该文件上使用
ls -l时,它是显示组名还是将组显示为数字? -
顺便说一句,调用
lstat()时需要将目录名和entry->d_name连接起来。否则,它会在当前目录中查找文件,而不是dir_name。 -
所以这是预期的结果。
/etc/group中没有组 ID 条目,getgrgid()返回NULL。