Comment lire l’autorisation de fichier linux par programmation en C / C ++

Comment puis-je lire l’autorisation de fichier linux par programmation à la place en utilisant “ls” puis parsingr le résultat.

L’appel système stat(2) renvoie une struct stat contenant un membre st_mode . Ce sont les bits de mode que ls -l affiche.

Sur mon système, la page man 2 stat dit:

  The following flags are defined for the st_mode field: S_IFMT 0170000 bitmask for the file type bitfields S_IFSOCK 0140000 socket S_IFLNK 0120000 symbolic link S_IFREG 0100000 regular file S_IFBLK 0060000 block device S_IFDIR 0040000 directory S_IFCHR 0020000 character device S_IFIFO 0010000 FIFO S_ISUID 0004000 set UID bit S_ISGID 0002000 set-group-ID bit (see below) S_ISVTX 0001000 sticky bit (see below) S_IRWXU 00700 mask for file owner permissions S_IRUSR 00400 owner has read permission S_IWUSR 00200 owner has write permission S_IXUSR 00100 owner has execute permission S_IRWXG 00070 mask for group permissions S_IRGRP 00040 group has read permission S_IWGRP 00020 group has write permission S_IXGRP 00010 group has execute permission S_IRWXO 00007 mask for permissions for others (not in group) S_IROTH 00004 others have read permission S_IWOTH 00002 others have write permission S_IXOTH 00001 others have execute permission 

Ceci est une fonction dans C, qui retourne les permissions de fichier dans le format de chaîne “rwxr-r–”

 char* permissions(char *file){ struct stat st; char *modeval = malloc(sizeof(char) * 9 + 1); if(stat(file, &st) == 0){ mode_t perm = st.st_mode; modeval[0] = (perm & S_IRUSR) ? 'r' : '-'; modeval[1] = (perm & S_IWUSR) ? 'w' : '-'; modeval[2] = (perm & S_IXUSR) ? 'x' : '-'; modeval[3] = (perm & S_IRGRP) ? 'r' : '-'; modeval[4] = (perm & S_IWGRP) ? 'w' : '-'; modeval[5] = (perm & S_IXGRP) ? 'x' : '-'; modeval[6] = (perm & S_IROTH) ? 'r' : '-'; modeval[7] = (perm & S_IWOTH) ? 'w' : '-'; modeval[8] = (perm & S_IXOTH) ? 'x' : '-'; modeval[9] = '\0'; return modeval; } else{ return strerror(errno); } }