ver permisos lista ejemplos contenido completa comandos basicos archivos archivo c osx unix permissions xattr

permisos - ¿Cómo obtener atributos extendidos de un archivo(UNIX/C)?



permisos de archivos en linux (2)

Lo siguiente es un código que eliminé de la implementación oficial de ls dada por Apple que encontrarás aquí . El código es largo, así que haga CMD + F y busque "printlong".

#include <sys/types.h> #include <sys/xattr.h> #include <sys/types.h> #include <sys/acl.h> #include <stdio.h> int main () { acl_t acl = NULL; acl_entry_t dummy; ssize_t xattr = 0; char str[10]; char * filename = "/Users/john/desktop/mutations.txt"; acl = acl_get_link_np(filename, ACL_TYPE_EXTENDED); if (acl && acl_get_entry(acl, ACL_FIRST_ENTRY, &dummy) == -1) { acl_free(acl); acl = NULL; } xattr = listxattr(filename, NULL, 0, XATTR_NOFOLLOW); if (xattr < 0) xattr = 0; str[1] = ''/0''; if (xattr > 0) str[0] = ''@''; else if (acl != NULL) str[0] = ''+''; else str[0] = '' ''; printf("%s/n", str); }

Dependiendo del archivo utilizado, el resultado será un espacio en blanco, @, o + exactamente de la misma manera que ls -l muestra. Espero que esto ayude !

Cuando ls -l en la línea de comandos, a veces aparece un símbolo @ o + junto a los permisos del archivo (por cierto, estoy en OS X), como se muestra a continuación:

-rw-r-----@ 1 john staff 6731 Sep 28 01:10 mutations.txt drwxr-xr-x+ 71 john staff 2414 Mar 25 18:16 ..

Sé cómo obtener los bits de permiso usando la estructura stat , pero no creo que estos valores de permisos extendidos estén allí. ¿Puede alguien señalarme en la dirección correcta cómo obtener estos valores a través de una API C o POSIX?

EDITAR :

Intenté lo siguiente:

#include <sys/types.h> #include <sys/xattr.h> #include <sys/types.h> int main () { char l[1024]; listxattr("/Users/john/desktop/mutations.txt", l, 1024, XATTR_SHOWCOMPRESSION); printf("%s/n", l); }

y obtuve como salida:

com.apple.metadata:kMDItemWhereFroms

¿Todavía estás tratando de entender cómo convertir esto en @ o + ?


@ significa que el archivo tiene atributos extendidos. Use listxattr() para obtener una lista de los nombres de todos los atributos extendidos, y getxattr() para obtener el valor de un atributo en particular. Si listxattr devuelve un resultado distinto de cero, mostraría @ para indicar esto.

Los atributos extendidos no están en POSIX, pero esta API está disponible en Linux y OS X, al menos.

Puede encontrar un ejemplo de cómo usar estas funciones aquí .

+ significa que el archivo tiene una lista de control de acceso. En algunos sistemas de archivos, esto se almacena como un atributo extendido especial; en otros se almacena por separado. Para listas de control de acceso, vea acl(5) para una referencia, y puede encontrar un programa de ejemplo que lo muestra aquí .