stat()获取组名是root

时间:2010-04-09 00:54:25

标签: c

我有一个文件src.tar.gz whoes owner和group被命名为“src”。 当我运行test.c编译时,名称为“test”(权限:-rwsr-xr-x所有者:root group:staff)

我运行它的方式: 我在“src”组下作为组成员运行它。 但我以root身份运行“test”,因为“test”权限是-rwsr-xr-x

问题: 为什么结果会像这样出来? src.tar.gz组应该是“src”吗?

输出:

Error: my group: src
Error: src.tar.gz group is root

test.c的

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <grp.h>

void main(int ac, char **args) {

        const char *ERR_MSG_FORMAT = "%s: %s %s.\n";
        char *ptr_source_file = "src.tar.gz";
        struct stat src_stat;
        gid_t  src_gid, my_gid;

        int i = stat(ptr_source_file, &src_stat);
                my_gid = getgid();
                struct group *cur_gr = getgrgid(my_gid);
                fprintf(stderr, ERR_MSG_FORMAT, "Error", "my group: ", cur_gr->gr_name);

                src_gid = src_stat.st_gid;
                struct group *src_gr = getgrgid(src_gid);
                fprintf(stderr, ERR_MSG_FORMAT, "Error","src.tar.gz group is ", src_gr->gr_name);

}

1 个答案:

答案 0 :(得分:0)

始终检查函数的返回值。也许stat()失败了,你得到st_gid 0只是因为之前有0。

对我而言,该计划运作良好。