Ok, prima di tutto, non sono troppo sicuro di quello che stai cercando di realizzare - hai detto che devi ottenere l'uid, ma getpwuid è per cercare altre informazioni basate su uid. Volevi forse getpwnam, che cerca in base al nome utente? E poi hai bisogno di usare l'uid per un'altra funzione?
In ogni caso, tutto quello che dico qui di seguito vale per entrambi getpwnam e getpwuid - basta scambiare fuori l'argomento uid per l'argomento nome utente.
Hai confuso un po 'la tua documentazione. Un quasi-citazione dalla pagina man:
struct passwd *getpwuid(uid_t uid);
int getpwuid_r(uid_t uid, struct passwd *pwbuf, char *buf, size_t buflen, struct passwd **pwbufp);
Il getpwuid() restituisce un puntatore a una struttura contenente i campi rotti-out del record nel database delle password che corrisponde al uid ID dell'utente.
La funzione getpwuid_r() ottiene le stesse informazioni, ma memorizza la struttura passwd recuperate nello spazio puntato da pwbuf.
Sembra che tu sia semplicemente un po 'confuso sui puntatori in generale. Tuttavia, non ci si deve preoccupare troppo per questo lavoro che suona come per i vostri scopi la versione più semplice potrebbe andare bene:
struct passwd * my_passwd;
my_passwd = getpwuid(uid);
// or:
// my_passwd = getpwnam(username);
if (my_passwd == NULL) {
// the lookup failed - handle the error!
} else {
// the lookup succeeded - do your thing
printf("User name: %s\n", my_passwd->pw_name);
printf("User password: %s\n", my_passwd->pw_passwd);
...
}
nota che in questo caso non è necessario allocare memoria per il puntatore , poiché getpwuid restituisce un puntatore alla struttura con la memoria allocata e le informazioni memorizzate.
La definizione completa della struttura (nomi di altri membri) si trova nella pagina man.
Il secondo modulo, getpwuid_r, è migliore per una gestione più accurata degli errori e della gestione della memoria, ma se tutto ciò che occorre fare è una ricerca rapida, questo dovrebbe andare bene.
Nizza, ho usato getpwuid, e utilizzato getpwuid_r. Speriamo che la risposta che l'OP sta cercando sia una di queste! – Cascabel