Strona 1 z 1
C - pobranie UID oraz GID
: 15 stycznia 2012, 12:51
autor: BrX
Witam
.
Próbuję pobrać UID oraz GID aktualnego
użytkownika w systemie i przerobić go na int, jednakże wychodzą mi jakieś kosmiczne liczby. Próbowałem
czegoś takiego:
Kod: Zaznacz cały
#include <pwd.h>
struct passwd *pd;
pd->pw_uid;
Jednak zwraca to zupełnie inny uid niż mam w systemie. W jaki sposób można wyciągnąć UID oraz GID w integer?
: 15 stycznia 2012, 14:29
autor: Rafal_F
Później rzutujesz to na int i po sprawie.
: 15 stycznia 2012, 15:11
autor: Czocher
Może dlatego, że stworzyłeś wskaźnik na strukturę, który na nic nie wskazuje, a potem czytasz niezaalokowany obszar pamięci? Pamiętaj, że zmienne lokalne (w tym wskaźniki), które zostały zdefiniowane ale nie zadeklarowane mają losową wartość, więc ten kod:
Kod: Zaznacz cały
#include <pwd.h>
struct passwd *pd;
pd->pw_uid;
Próbuje się odwołać do losowego obszaru pamięci procesu, stąd dziwnie liczby.
Za to taki kod:
Kod: Zaznacz cały
#include <stdio.h>
#include <pwd.h>
int
main(int argc, char **argv)
{
struct passwd *p;
while ((p = getpwent()) != NULL)
printf("%s:%s:%ld:%ld:%s:%s:%s\n",
p->pw_name, p->pw_passwd, (long) p->pw_uid,
(long) p->pw_gid, p->pw_gecos, p->pw_dir, p->pw_shell);
endpwent();
return 0;
}
Zrobi to co zamierzasz.
Wesołego hackowania
