Как правильно отобразить groupID (GID) в C?

Как правильно отобразить groupID (GID) в C?

27.10.2015 08:31:14 Просмотров 31 Источник

Я пытаюсь отобразить свой userID и groupID через одну из моих функций в моей программе C. Идентификатор пользователя отображается правильно (501), но мои группы не является. Когда я захожу в группы с помощью команды "ИД-г" я получаю 20, но когда я запускаю его через мою программу, используя функцию, я получаю значение 1.

Это мой код.

int Registerpw(char **args){

    register struct passwd *pw;
    register uid_t uid;
    int c;
    register gid_t gid;
    register struct group *grp;
    grp = getgrgid(gid);

    uid = geteuid();
    pw = getpwuid(uid);


    if (pw)
    {
            printf("%d,",uid);      // userID
            printf("%d,", gid);    //groupID
            puts (pw->pw_name);
            puts(grp->gr_name);


    }
    else{
        printf("failed\n");
    }
    return 1;
}

Мой вывод таков

501,1,USERNAME
daemon
У вопроса есть решение - Посмотреть?

Ответы - Как правильно отобразить groupID (GID) в C? / How to display groupID (GID) correctly in C?

Является ответом!
starrify

27.10.2015 08:43:46

Ваш код просто объявил и определил переменную gid, но оставил ее значение неинициализированным. Вы должны присвоить ему правильное значение:

register gid_t gid;
gid = getgid();

Или просто:

register gid_t gid = getgid();
https://stackoverflow.com/questions/33374735/how-to-display-groupid-gid-correctly-in-c/33374976#comment54551436_33374976
Спасибо за разъяснение. Это была глупая ошибка с моей стороны.
https://stackoverflow.com/questions/33374735/how-to-display-groupid-gid-correctly-in-c/33374976#comment54575496_33374976
Вы знаете, как бы я смог напечатать все это в одной строке? Если вы посмотрите на мои выходные данные, вы можете увидеть, что он печатает имя группы в строке ниже, потому что у меня есть его в "puts". Вы знаете, как я могу избежать использования его в "puts" и, возможно, напечатать его по-другому?
https://stackoverflow.com/questions/33374735/how-to-display-groupid-gid-correctly-in-c/33374976#comment54586378_33374976
@Recap putsдобавит символ новой строки к строке, которую вы пытаетесь напечатать. Если вам не нужен символ новой строки, вы можете использовать что-то вроде printf("%s", pw->pw_name);вместо этого.
https://stackoverflow.com/questions/33374735/how-to-display-groupid-gid-correctly-in-c/33374976#comment54624178_33374976
Когда я изменяю его на printf("%s", pw->pw_name);я получаю "Segmentation fault: 11"возвращается, и он выходит из программы
https://stackoverflow.com/questions/33374735/how-to-display-groupid-gid-correctly-in-c/33374976#comment54628246_33374976
@Recap не могли бы вы опубликовать еще один вопрос, описывающий проблему (рекомендуется)? Или, по крайней мере, отредактируйте исходный вопрос, чтобы добавить текущий код, который вызывает проблему (не рекомендуется). Так как у вас, возможно, было несколько изменений в коде, и другие не будут знать, что происходит на самом деле.
https://stackoverflow.com/questions/33374735/how-to-display-groupid-gid-correctly-in-c/33374976#comment54633455_33374976
Извини, что это была моя ошибка. Теперь он у меня отлично работает. Спасибо за помощь
Anusha

05.02.2020 09:42:09

я просто объявляю переменные, используя int datatype, и использую getgid() и geteuid() метод для отображения userid и groupid.

int gid,uid;
uid=geteuid();
gid=getgid();
https://stackoverflow.com/questions/33374735/how-to-display-groupid-gid-correctly-in-c/60070243#comment106240304_60070243
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и / или как этот код отвечает на вопрос, улучшает его долгосрочную ценность.
Помочь в развитии проекта:
Закрыть X