【问题标题】:Why i get Undefined error in getgrgid() function为什么我在 getgrgid() 函数中出现未定义错误
【发布时间】: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

标签: c file unix directory


【解决方案1】:

getgrgid() 在出现错误或未找到组 ID 时返回 NULL。您需要检查errno 来区分。

另外,group_info 是一个结构,而不是字符串,你不能用printf() 打印它。获取gr_name 成员以打印组名。

            if ((group_info = getgrgid(rd_stat.st_gid)) == NULL) {
                if (errno) {  
                    perror("getgrgid() error");
                } else {
                    printf("Unnamed group %d\n", rd_stat.st_gid);
                }
            } else {
                printf(%s\n", group_info.gr_name);
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    相关资源
    最近更新 更多