Nie jestem ekspertem w tej dziedzinie, ale przeczytałem trochę, aby zrozumieć, co się dzieje.
Powiedziałbym, że „zamieszanie wynika z faktu, że:
- związek między tymi pojęciami jest złożony i
- zmieniło się z czasem i
- Apple wdrożyło zarówno interfejsy API na poziomie programu, jak i narzędzia, takie jak ls lub cp, aby ukryć wiele różnic między koncepcjami ”.
AIUI, plik katalogu HFS + zawiera rekordy plików katalogu (między innymi). Rekord pliku katalogu zawiera normalne informacje na temat pliku, takie jak data utworzenia, data dostępu itp. Rekord pliku katalogu zawiera także dwie struktury, które podają informacje o lokalizacji i rozmiarze rozwidlenia danych i rozwidlenia zasobów.
AIUI, HFS + ma również (skopiowany z Wikipedii HFS +) „Plik atrybutów [który] jest nowym drzewkiem B w HFS Plus, które nie ma odpowiedniej struktury w HFS. Plik atrybutów może przechowywać trzy różne typy rekordów o wielkości 4 KB: Rekordy Atline Data Atrybut, rekordy Atrybut Danych Widelca i rekordy Atrybut Rozszerzeń. Rekordy Inline Atrybut Danych przechowują małe atrybuty, które mogą zmieścić się w samym rekordzie. Rekordy Atrybut Danych Widelca zawierają odniesienia do maksymalnie ośmiu zakresów, które mogą zawierać większe atrybuty. używane do rozszerzenia rekordu atrybutu danych widelca, gdy jego osiem rekordów zasięgu jest już używanych. ”
AIUI, dane przechowywane w pliku atrybutów (lub do których się odwołuje) (atrybuty wbudowane, dane widelca lub atrybuty rozszerzenia) są znane jako atrybuty rozszerzone.
To są struktury danych, więc jak je wykorzystać?
AIUI, wczesne wersje systemu operacyjnego (być może wersje wcześniejsze niż 10.4 Tiger, które, jak sugeruje John Siracusa , miały pewne poważne zmiany w tym obszarze), wskazywały na rozwidlenie danych i rozwidlenie zasobów z pliku katalogu.
AIUI, kiedy przejdziemy do 10.4 Tygrysa, plik atrybutów staje się szeroko stosowany do przechowywania wszelkiego rodzaju danych.
Możliwe (ale nie wiem), że w wersji 10.4 i późniejszych wszelkie Widelce zasobów są wskazane w pliku atrybutów. To znaczy w odpowiedzi na twoje pierwsze pytanie, powiedziałbym, że nazwane widelce są Rozszerzonymi Atrybutami, chyba że są Widelcem Zasobów, a Widelec Zasobów jest przywoływany z pliku Katalogu.
Problem ze znajomością sposobu implementacji polega na tym, że w celu zachowania kompatybilności wstecznej, a prawdopodobnie szczególnie w celu wsparcia dostępu do systemów plików zapisanych przez jedną wersję systemu Mac OS z innej wersji, różne rzeczy i mieszanki rzeczy muszą być obsługiwane w sposób przejrzysty.
Nie możemy stwierdzić na podstawie zwykłych narzędzi wiersza poleceń terminalu, gdzie faktycznie przechowywane są dane.
Dostęp do rsrc
może sugerować, że dostęp do Widelca zasobów w pliku katalogu jest dostępny.
$ ls -l Icon^M/rsrc
-rwxr-xr-x 1 root admin 486 23 Jul 2004 Icon?/rsrc
Wiemy jednak, że chociaż składnia wygląda na dostęp do pliku poniżej Icon^M
katalogu, tak nie jest, ponieważ
$ ls -lR Icon^M
-rwxr-xr-x@ 1 root admin 0 23 Jul 2004 Icon?
więc Apple wdrożyło specjalny przypadek dla widełek zasobów.
Jeśli zamiast tego zrobimy
$ ls -l@
-rwxr-xr-x@ 1 root admin 0 23 Jul 2004 Icon?
com.apple.FinderInfo 32
com.apple.ResourceFork 486
Sugeruje to, że uzyskujemy dostęp do pliku atrybutów. Ale znowu wdrożenie ls
może mieć szczególny przypadek dla widełek zasobów.
John Siracusa wskazuje tutaj, że listy ACL są przechowywane jako „Rozszerzone atrybuty”, ale są specjalnie maskowane, aby nie były wyświetlane xattr
. Więc znowu jest specjalne przetwarzanie przypadków w implementacji xattr.
(Pamiętaj, że to przetwarzanie specjalnych przypadków może znajdować się w kodzie narzędzia lub w kodzie podstawowych interfejsów API, do których narzędzia mają dostęp).
GregW, jeśli to zobaczysz, fajnie byłoby uzyskać bardziej ekspercką opinię, czy jestem na dobrej drodze, czy po prostu beznadziejnie zdezorientowany.