stat () получить имя группы root - PullRequest
1 голос
/ 09 апреля 2010

У меня есть файл src.tar.gz, чей владелец и группа называются "src". Когда я запускаю test.c, скомпилированный с именем «test» (разрешение: -rwsr-xr-x владелец: корневая группа: персонал)

То, как я запускаю это: Я запускаю его как член группы в группе "src". Но я запускаю "test" от имени пользователя root, поскольку разрешение "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 голосов
/ 09 апреля 2010

Всегда проверять возвращаемые значения функций. Может быть, stat() не удалось, и вы получите st_gid 0 только потому, что раньше было 0.

Для меня программа работает хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...