2012-01-11 19 views

risposta

22

La chiamata di sistema stat(2) restituisce un struct stat che contiene un membro st_mode. Questo è il bit di modalità che visualizza ls -l.

Sul mio sistema, la pagina man 2 stat dice:

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 
+4

Ecco il link alla pagina del documento http://linux.die.net/man/2/stat. Grazie mille Greg –

2

Questa è una funzione in C, che restituisce i permessi dei file in formato stringa "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); 
    } 
} 
+3

Mentre questo codice può rispondere alla domanda, fornire un contesto aggiuntivo su come e/o perché risolve il problema potrebbe migliorare il valore a lungo termine della risposta. – glennsl

Problemi correlati