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

Kod: Zaznacz cały

man getuid
man getgid
 
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 ;)