C - pobranie UID oraz GID

Potrzebujesz pomocy z C, C++, perl, python, itp.
BrX
Posty: 1
Rejestracja: 14 stycznia 2012, 20:53

C - pobranie UID oraz GID

Post 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?
Awatar użytkownika
Rafal_F
Moderator
Posty: 2350
Rejestracja: 29 sierpnia 2008, 16:45

Post autor: Rafal_F »

Kod: Zaznacz cały

man getuid
man getgid
 
Później rzutujesz to na int i po sprawie.
Czocher
Beginner
Posty: 140
Rejestracja: 26 maja 2007, 23:19

Post 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 ;)
ODPOWIEDZ