2011-09-07 14 views
9

¿Cómo puedo obtener el nombre del propietario y el nombre del grupo de un archivo en un sistema de archivos Linux usando C++? La llamada stat() solo me da ID de propietario e ID de grupo, pero no el nombre real.¿Cómo obtener el nombre del propietario del archivo en Linux usando C++?

-rw-r--r--. 1 john devl 3052 Sep 6 18:10 blah.txt 

¿Cómo puedo obtener 'john' y 'devl' mediante programación?

Respuesta

22

Utilice getpwuid() y getgrgid().

#include <pwd.h> 
#include <grp.h> 
#include <sys/stat.h> 

struct stat info; 
stat(filename, &info); // Error check omitted 
struct passwd *pw = getpwuid(info.st_uid); 
struct group *gr = getgrgid(info.st_gid); 

// If pw != 0, pw->pw_name contains the user name 
// If gr != 0, gr->gr_name contains the group name 
+3

Para completar, tenga en cuenta que * "getpwnam() y getpwuid() buscan en la base de datos de contraseñas el nombre de usuario o el usuario dado, respectivamente, ** siempre devuelve el primero encontrado **" * (énfasis añadido) porque un UID puede asociarse con más de un nombre de usuario (aunque esto generalmente no está bien visto). – dmckee

+0

Comentario de la feria. Una de las bane de mi vida es que el archivo del grupo local tiene múltiples entradas para GID 1234 con diferentes nombres. Tiende a significar 'getgrent()' para determinar si el usuario 'jdoe' es realmente un miembro del grupo 1234. –

3

Una forma sería utilizar stat() para obtener el UID de un archivo y luego getpwuid() para obtener el nombre de usuario como una cadena.

Cuestiones relacionadas