Fork zasobu () – fork lub sekcja pliku w klasycznym systemie operacyjnym Mac OS, został również przeniesiony do nowoczesnego macOS dla kompatybilności, używany do przechowywania strukturyzowanych danych wraz z niestrukturyzowanymi danymi przechowywanymi w forku danych.

Fork zasobu przechowuje informacje w określonej formie, zawierające szczegóły, takie jak mapy bitowe ikon, kształty okien, definicje menu i ich zawartości oraz kod aplikacji (kod maszynowy). Na przykład plik edytora tekstu może przechowywać tekst w forku danych, a jednocześnie przechowywać wszelkie osadzone obrazy w forku zasobu tego samego pliku. Fork zasobu jest używany głównie przez pliki wykonywalne, ale każdy plik może mieć fork zasobu.

System plików Macintosh (MFS) Pierwotnie pomyślany i zaimplementowany przez programistę , fork zasobu został wykorzystany do trzech celów w systemie plików Macintosh:

Służył do przechowywania wszystkich danych graficznych na dysku, dopóki nie były potrzebne, a następnie pobrane, rysowane na ekranie i wyrzucane. Ten wariant oprogramowania pamięci wirtualnej pomógł Apple zmniejszyć wymagania dotyczące pamięci z 1 MB w Apple Lisa do 128 KB w Macintoshu. Ponieważ wszystkie obrazy i tekst były przechowywane osobno w forku zasobów, można było go użyć, aby umożliwić nieprogramistom na tłumaczenie aplikacji na rynek zagraniczny, proces ten nazywany jest . Można było go wykorzystać do dystrybucji prawie wszystkich komponentów aplikacji w jednym pliku, zmniejszając bałagan i upraszczając instalację i usuwanie aplikacji.

Fork zasobu jest zaimplementowany we wszystkich systemach plików używanych dla dysków systemowych na komputerach Macintosh (, HFS i HFS Plus). Obecność forka zasobu ułatwia przechowywanie szeregu dodatkowych informacji, takich jak umożliwienie systemowi wyświetlenia właściwej ikony pliku i otwarcia go bez potrzeby rozszerzenia pliku w nazwie pliku. Podczas gdy dostęp do forka danych działa jak dostęp do pliku w dowolnym innym systemie operacyjnym – wybierz plik, wybierz przesunięcie bajtu, przeczytaj niektóre dane – dostęp do forka zasobu działa bardziej jak wyodrębnianie uporządkowanych rekordów z bazy danych. (Microsoft Windows ma również pojęcie „zasobów”, ale są one całkowicie niezwiązane z zasobami w Mac OS.)

Fork zasobu jest czasem używany do przechowywania metadanych pliku, chociaż może być również używany do przechowywania rzeczywistych danych, tak jak miało to miejsce w przypadku plików czcionek w klasycznych systemach operacyjnych Mac. Należy zauważyć, że systemy plików Macintosh mają również oddzielny obszar dla metadanych, inny niż fork danych lub zasobu. Będąc częścią katalogowego wpisu pliku, dostęp do tego jest znacznie szybszy. Jednak ilość przechowywanych tutaj danych jest minimalna, są to tylko znaczniki czasu tworzenia i modyfikacji, typ pliku i kody twórcy, długości forka i nazwa pliku. Niektóre pliki mają tylko forka zasobów. Klasyczne aplikacje 68k są jednym przykładem, w którym nawet kod wykonywalny jest zawarty w zasobach typu „KOD”. Późniejsze pliki binarne PowerPC przechowują kod wykonywalny we forku danych.

Ponieważ forki zasobu są obsługiwane tylko w systemach plików HFS i HFS Plus, nie można ich używać w systemach operacyjnych, które używają innych systemów plików. Obecnie HFS jest obsługiwany tylko przez system operacyjny Macintosha, co oznacza, że tylko komputery z systemem Mac OS mogą korzystać z forków zasobu. Nawet w systemie Mac OS nie można używać forków zasobów, jeśli Uniksowy system plików został zainstalowany. W systemie plików HFS Plus, który jest obecnie systemem najczęściej używanym w systemie Mac OS, można wprowadzić ustawienia pozwalające innym forkom oprócz forków danych i zasobu, tworzyć aplikację „multi-fork”. Ponieważ jednak forki mogą utrudniać wymianę plików z innymi systemami operacyjnymi, ta funkcja nie jest powszechnie używana. Nawet w macOS forki zasobu są rzadko używane.

Obecnie macOS obsługuje forki zasobu w Windowsowych udziałach SMB, tworząc ukryty plik ze znakami „. _” dodanymi na początku nazwy pliku, w tym samym katalogu, co plik forka danych.

Identyfikatory zasobu Każdy zasób ma identyfikator OSType (wartość czterobajtową) i identyfikator (podpisane 16-bitowe słowo), a także opcjonalną nazwę. Istnieją standardowe typy zasobów dla okien dialogowych („DITL”), obrazów („ PICT „), dźwięków („snd”) – a nawet plików wykonywalnych („CODE”), które do czasu pojawienia się procesora PowerPC były bez wyjątku przechowywane w forku zasobów. Podprogramy do renderowania okien są przechowywane we własnym typie zasobów („WDEF”), podprogramy do renderowania menu w ich („MDEF”), a jeśli istnieje rodzaj danych, który Twoim zdaniem nie pasuje do żadnej ze standardowych kategorii, możesz równie dobrze może użyć własnego typu (np. „John”) – właściwie dowolne cztery znaki lub wartość 32-bitowa mogą służyć jako typ zasobu. Takie ustawienie umożliwiło użytkownikom łatwe dostosowanie nie tylko poszczególnych aplikacji, ale także samego systemu operacyjnego, za pomocą narzędzi takich jak ResEdit do modyfikowania zasobów pliku aplikacji lub dowolnego pliku systemowego.

W aplikacji lub innym kodzie zasoby mogą być ładowane po prostu za pomocą kombinacji ich typu, identyfikatora lub nazwy, bez względu na to, jak i gdzie są przechowywane w forku zasobu. Klient otrzymuje uchwyt do załadowanego zasobu, do którego następnie można uzyskać dostęp, jak każdych innych danych opartych na puli. Składnikiem systemu operacyjnego, który to ułatwia, jest Menedżer Zasobu. Oprócz wyodrębnienia szczegółów przechowywania danych z samych danych, Menedżer Zasobu układa również zestawy otwartych forków zasobu w stos, z ostatnio otwieranym plikiem na górze. Podczas próby załadowania zasobu, najpierw zajrzy na górę stosu (być może fork zasobu bieżącego dokumentu), następnie następny w dół (fork zasobu aplikacji), a następnie następny (fork zasobu systemowych). To ustawienie jest bardzo wydajne – pozwala lokalnym zasobom na zastąpienie bardziej globalnych niżej – tak więc aplikacja może na przykład udostępnić własne ikony lub czcionki zamiast standardowych systemowych. Pozwala również aplikacji ładować zasoby z systemu przy użyciu tego samego interfejsu API, co każdy inny zasób, bez względu na miejsce i sposób przechowywania tego zasobu – w aplikacji wszystkie zasoby są jednakowo dostępne i łatwe w użyciu. System rezerwuje identyfikatory zasobów w pewnym zakresie, aby uniknąć wynikających z tego konfliktów zasobu. Interfejsy API Menedżera Zasobu pozwalają programiście manipulować stosem i modyfikować zachowanie wyszukiwania.

Edycja forków zasobu Ponieważ forka zasobu można edytować za pomocą edytora zasobu, takiego jak ResEdit, można go używać do lokalizowania i dostosowywania oprogramowania. Ponadto większość edytorów zasobu umożliwia wizualną edycję danych. W macOS możliwe jest korzystanie z zasobów podczas tworzenia aplikacji. Jeśli jednak aplikacja może wymagać użycia w systemie plików UFS, można ją również skonfigurować tak, aby cały fork zasobu został przeniesiony do forka danych za pomocą ustawienia Raw Resource File. Zintegrowane środowiska programistyczne dystrybuowane za darmo przez Apple Inc., w tym i Apple Developer’s Tools, zawierają kompilator o nazwie Rez. Używa on specjalnego języka, zwanego także Rez, którego można użyć do utworzenia forka zasobu poprzez kompilację kodu źródłowego. Uwzględniono również dekompilator DeRez, którego można użyć do zmiany forka zasobu z powrotem na kod Rez.

W strukturze forka zasobu znajduje się część danych zwana „mapą zasobu”, która przechowuje pozycje elementów danych zasobu. Można to wykorzystać, aby umożliwić losowy dostęp do danych zasobu na podstawie zdefiniowanych identyfikatorów i nazw. Fork zasobu można uznać za składający się zasadniczo z dwóch obiektów, mapy zasobu i samych danych zasobu, ale w rzeczywistości każdy typ danych jest strukturą hierarchiczną, która przechowuje wiele elementów danych. Format, w którym przechowywane są informacje w danych zasobu, jest definiowany na podstawie typów informacji, które są znane jako „typy zasobu”. Dane zasobu często zawierają odniesienia do innych typów danych.

W macOS forki noszą nazwę plik/..nazwanyfork/nazwaforka, np. Fork zasobu pliku IMG_0593.jpg to IMG_0593.jpg/..namedfork/rsrc. Polecenie ls obsługuje opcję -l@, która wyświetla listę forków pliku.

Jak uzyskiwany jest dostęp do forka zasobu Forki zasobu pojawiają się jako rozszerzony atrybut com.apple. ResourceFork.

Wcześniej dostęp do forków zasobu był możliwy za pośrednictwem API „Menedżer Zasobu”. Ten interfejs API jest teraz przestarzały.

W przestarzałym interfejsie API:

Gdy dostęp do forka zasobu jest uzyskiwany, dane zawierające pozycję początkową i długość danych zasobu oraz mapę zasobu są wczytywane z nagłówka. Jeśli określono typ zasobu do odczytu, przeprowadzane jest sprawdzenie, aby upewnić się, że ten typ znajduje się na liście zasobu, a także liczbę pozycji danych zawierających ten typ i ich przesunięcia na liście referencyjnej zasobu od pozycji początkowej mapa zasobu została znaleziona. Znaleziono identyfikator zasobu, przesunięcie nazwy zasobu, właściwości zasobu i przesunięcie danych od pozycji początkowej danych zasobu. Jeśli dane zasobu o określonym identyfikatorze lub nazwie znajdują się w danych zasobu, uzyskiwany jest dostęp do przesunięcia uzyskanego powyżej, długość danych zostaje znaleziona, a wszystkie przechowywane tam dane są wczytywane i zwracane jako wartość zwracana.

API menedżera plików, takie jak PBOpenRF() również umożliwiały dostęp do forka zasobu; należy ich jednak używać tylko w aplikacjach, takich jak kopiowanie pliku – Apple zdecydowanie ostrzega przed użyciem forka zasobu jako „drugiego forka danych”.

Z interfejsu POSIX można uzyskać dostęp do forka zasobu jako nazwapliku/..nazwaforka/rsrc lub jako nazwapliku/rsrc; krótsza wersja została wycofana w Mac OS X 10.4 i całkowicie usunięta w Mac OS X 10.7.

Typy danych w forku zasobu Najmniejsze elementy tworzące forka zasobu nazywane są typami danych. Istnieje kilka typów danych. Po uzyskaniu dostępu do forka zasobu jego zawartość można znaleźć, odczytując go odpowiednio dla typów danych zdefiniowanych wcześniej. Umieszczenie w programie definicji określających sposób przetwarzania danych umożliwia również przechowywanie zasobu zwanych zasobami TMPL. Zastosowanie tej metody zwiększa widoczność danych podczas przeglądania za pomocą programu takiego jak ResEdit, co ułatwia późniejszą edycję. Ponieważ platforma Macintosh pochodzi z procesorów Motorola (68k i PPC), dane są serializowane na dysk w formacie big endian.

Poniżej znajduje się lista głównych typów danych w kolejności alfabetycznej. Typ danych faktyczna nazwa Opis BBIT binary bit Reprezentuje pojedynczy bit boolean (prawda lub fałsz). Zwykle liczba BBIT musi być wielokrotnością 8. BOOL boolean Reprezentuje wartość boolean. Składa się z 2 bajtów; 256 to prawda, a 0 to fałsz. CHAR character Reprezentuje znak jednobajtowy. CSTR C string Reprezentuje ciąg formy używanej w języku programowania C: zakończony zerem ciąg bajtów. DLNG decimal long word integer Długie dziesiętne słowo (4-bajtowa liczba całkowita). Reprezentuje wartości od około – 2,1 miliarda do 2,1 miliarda. HEXD hex dump Wskazuje, że dane od tej pozycji do końca są szesnastkowe. Służy do reprezentowania zasobu kodu lub skompresowanych danych. HLNG long word hexadecimal Te dane są traktowane jako 4-bajtowa wartość szesnastkowa. Jest on używany między innymi do reprezentowania liczb całkowitych większych niż 2,1 miliarda, takich jak długie niepodpisane wartości w C. PSTR Pascal string Reprezentuje ciąg Pascal, przy czym pierwszy bajt podaje długość ciągu. TNAM type name Ciąg reprezentujący wartość, taką jak kod twórcy, który zawsze ma 4 bajty. RECT rectangle Reprezentuje współrzędne narożników prostokąta (górny, lewy, dolny, prawy). Zawsze 8 bajtów.

Główne typy zasobu