Я не эксперт в этом, но я прочитал немного, чтобы попытаться понять, что происходит.
Я бы сказал, «Путаница возникает из-за того, что:
- связь между этими понятиями сложна и
- со временем изменился и
- Apple реализовала как программные API-интерфейсы, так и такие инструменты, как ls или cp, чтобы скрыть многие различия между концепциями ».
AIUI, файл каталога HFS + содержит записи файла каталога (среди прочего). Запись файла каталога содержит обычную информацию о файле, такую как дата создания, дата доступа и т. Д. Запись файла каталога также содержит две структуры, которые предоставляют информацию о местоположении и размере ветвления данных и ветвления ресурса.
AIUI, HFS + также имеет (скопировано из Википедии HFS +) «Файл атрибутов [который] является новым B-деревом в HFS Plus, который не имеет соответствующей структуры в HFS. Файл атрибутов может хранить три различных типа записей по 4 КБ: Встроенные записи атрибутов данных, записи атрибутов данных вилки и записи атрибутов расширения. Встроенные записи атрибутов данных хранят небольшие атрибуты, которые могут поместиться в самой записи. Записи атрибутов данных вилки содержат ссылки максимум на восемь экстентов, которые могут содержать более крупные атрибуты. используется для расширения записи атрибута данных Fork, когда его восемь записей экстента уже используются. "
AIUI, данные, хранящиеся в (или на которые ссылаются) файле атрибутов (будь то встроенные, форковые данные или атрибуты расширения), называются расширенными атрибутами.
Это структуры данных, так как они используются?
AIUI, ранние версии операционной системы (возможно, версии до 10.4 Tiger, которые, по- видимому, указывает Джон Сиракуза , имел некоторые существенные изменения в этой области), указывал на ветвь данных и ветвь ресурсов из файла каталога.
AIUI, как только мы доберемся до 10.4 Tiger, файл атрибутов станет широко использоваться для хранения всех видов данных.
Возможно (но я не знаю), что в 10.4 и позже любые Ресурсные Форки указываются из Файла Атрибутов. То есть, отвечая на ваш первый вопрос, я бы сказал, что именованные вилки - это расширенные атрибуты, если они не являются вилкой ресурсов, а ссылка на вилку ресурса указана из файла каталога.
Проблема в знании того, как все реализовано, заключается в том, что для сохранения обратной совместимости и, возможно, особенно для поддержки доступа к файловым системам, написанным одной версией Mac OS из другой версии, необходимо прозрачно поддерживать разные вещи и их комбинации.
Мы не можем сказать из обычных инструментов командной строки терминала, где на самом деле хранятся данные.
Таким образом, доступ к rsrc
может означать, что к ресурсной вилке в файле каталога осуществляется доступ.
$ ls -l Icon^M/rsrc
-rwxr-xr-x 1 root admin 486 23 Jul 2004 Icon?/rsrc
Тем не менее, мы знаем , что , хотя синтаксис выглядит как файл ниже Icon^M
каталога осуществляется доступ, это не совсем так, потому что
$ ls -lR Icon^M
-rwxr-xr-x@ 1 root admin 0 23 Jul 2004 Icon?
поэтому Apple реализовала специальный кейс для Resource Forks.
Если вместо этого мы делаем
$ ls -l@
-rwxr-xr-x@ 1 root admin 0 23 Jul 2004 Icon?
com.apple.FinderInfo 32
com.apple.ResourceFork 486
Это говорит о том, что мы обращаемся к файлу атрибутов. Но опять же, реализация ls
может иметь особый случай для Resource Forks.
Джон Сиракуза указывает здесь, что списки ACL хранятся как «Расширенные атрибуты», но специально замаскированы, поэтому они не отображаются в xattr
. Итак, опять же, в реализации xattr есть особая обработка.
(Обратите внимание, что эта особая обработка может происходить в коде инструмента или в коде базовых API, к которым инструменты получают доступ.)
GregW, если вы видите это, было бы неплохо получить более экспертное мнение относительно того, нахожусь ли я в правильном направлении, или просто безнадежно запутался.