No soy un experto en esto, pero he leído un poco para tratar de entender lo que está sucediendo.
Yo diría que "la confusión surge del hecho de que:
- la relación entre estos conceptos es compleja y
- ha cambiado con el tiempo y
- Apple ha implementado tanto API como herramientas de nivel de programa, como ls o cp, es una forma de ocultar muchas de las diferencias entre los conceptos ".
AIUI, el archivo de catálogo HFS + contiene registros de archivo de catálogo (entre otras cosas). El registro del archivo del catálogo contiene el tipo normal de información sobre el archivo, como la fecha de creación, la fecha de acceso, etc. El registro del archivo del catálogo también contiene dos estructuras que proporcionan información sobre la ubicación y el tamaño de la bifurcación de datos y de la bifurcación de recursos.
AIUI, HFS + también tiene (copiado de Wikipedia HFS +) un "Archivo de atributos [que] es un nuevo árbol B en HFS Plus que no tiene una estructura correspondiente en HFS. El Archivo de atributos puede almacenar tres tipos diferentes de registros de 4 KB: Los registros de atributos de datos en línea, los registros de atributos de datos de horquilla y los registros de atributos de extensión. Los registros de atributos de datos en línea almacenan pequeños atributos que pueden caber dentro del registro. Los registros de atributos de datos de horquilla contienen referencias a un máximo de ocho extensiones que pueden contener atributos más grandes. se utiliza para extender un registro de Atributo de datos de Fork cuando ya se usan sus registros de ocho extensiones ".
AIUI, los datos almacenados en (o referenciados desde) el Archivo de atributos (ya sea en línea, Datos de horquilla o Atributos de extensión) se conocen como Atributos extendidos.
Esas son las estructuras de datos, entonces, ¿cómo se usan?
AIUI, las primeras versiones del sistema operativo (posiblemente versiones anteriores a 10.4 Tiger, que John Siracusa parece indicar que tuvieron algunos cambios importantes en esta área), señalaron la bifurcación de datos y la bifurcación de recursos del archivo del Catálogo.
AIUI, una vez que llegamos a 10.4 Tiger, el archivo de atributos se usa ampliamente para almacenar todo tipo de datos.
Es posible (pero no lo sé) que en 10.4 y posteriores, cualquier Resource Forks se señale desde el Archivo de atributos. Es decir, en respuesta a su primera pregunta, diría que los tenedores con nombre son atributos extendidos, a menos que sean el tenedor de recursos, y el tenedor de recursos se hace referencia desde el archivo de catálogo.
El problema para saber cómo se implementan las cosas es que para preservar la compatibilidad con versiones anteriores, y probablemente particularmente para admitir el acceso a los sistemas de archivos escritos por una versión de Mac OS desde otra versión, se deben admitir de manera transparente diferentes cosas y mezclas de cosas.
No podemos decir por las herramientas normales de la línea de comando de la Terminal dónde se almacenan los datos.
Por lo tanto, el acceso a rsrc
podría sugerir que se está accediendo a la bifurcación de recursos en el archivo de catálogo.
$ ls -l Icon^M/rsrc
-rwxr-xr-x 1 root admin 486 23 Jul 2004 Icon?/rsrc
Sin embargo, sabemos que aunque la sintaxis parece que Icon^M
se está accediendo a un archivo debajo del directorio, este no es realmente el caso, porque
$ ls -lR Icon^M
-rwxr-xr-x@ 1 root admin 0 23 Jul 2004 Icon?
entonces Apple ha implementado un caso especial para Resource Forks.
Si en cambio lo hacemos
$ ls -l@
-rwxr-xr-x@ 1 root admin 0 23 Jul 2004 Icon?
com.apple.FinderInfo 32
com.apple.ResourceFork 486
Esto sugiere que estamos accediendo al archivo de atributos. Pero, de nuevo, la implementación de ls
puede tener un caso especial para Resource Forks.
John Siracusa señala aquí que las listas de ACL se almacenan como 'Atributos extendidos', pero están especialmente enmascaradas para que no se muestren xattr
. De nuevo, hay un procesamiento de casos especiales en la implementación de xattr.
(Tenga en cuenta que este procesamiento de caso especial puede estar en el código de la herramienta o en el código de las API subyacentes a las que acceden las herramientas).
GregW, si ves esto, sería bueno obtener una opinión más experta en cuanto a si estoy en la línea correcta, o simplemente confusa.