Ресурсная вилка - Resource fork

Вилка ресурса является вилкой или разделом из файла на Apple , «s классического Mac OS операционной системе , которая также была проведена над современным MacOs для совместимости, используемой для хранения структурированных данных вместе с неструктурированными данными , хранящихся в вилке данных .

Ответвление ресурсов хранит информацию в определенной форме, содержащую такие детали, как растровые изображения значков, формы окон, определения меню и их содержимого, а также код приложения ( машинный код ). Например, текстовый файл может хранить свой текст в ответвлении данных, а любые встроенные изображения - в ответвлении ресурсов того же файла. Вилка ресурсов используется в основном исполняемыми файлами, но каждый файл может иметь вилку ресурсов.

Файловая система Macintosh

Первоначально задуманный и реализованный программистом Брюсом Хорном , вилка ресурсов использовалась для трех целей с файловой системой Macintosh :

  • Он использовался для хранения всех графических данных на диске до тех пор, пока они не понадобились, затем извлекались, отображались на экране и выбрасывались. Этот программный вариант виртуальной памяти помог Apple снизить требования к памяти с 1 МБ в Apple Lisa до 128 КБ в Macintosh.
  • Поскольку все изображения и текст хранились отдельно в ответвлении ресурсов, его можно было использовать, чтобы позволить непрограммисту переводить приложение для иностранного рынка - процесс, называемый интернационализацией и локализацией .
  • Его можно использовать для распределения почти всех компонентов приложения в одном файле, уменьшая беспорядок и упрощая установку и удаление приложения.

Разветвление ресурсов реализовано во всех файловых системах, используемых для системных дисков на Macintosh ( MFS , HFS и HFS Plus ). Наличие вилки ресурсов упрощает хранение разнообразной дополнительной информации, например, позволяет системе отображать правильный значок для файла и открывать его без необходимости указывать расширение файла в имени файла. Хотя доступ к вилке данных работает так же, как доступ к файлу в любой другой операционной системе - выберите файл, выберите смещение в байтах, прочитайте некоторые данные - доступ к вилке ресурсов больше похож на извлечение структурированных записей из базы данных . (В Microsoft Windows также есть понятие « ресурсы », но они совершенно не связаны с ресурсами в Mac OS.)

Вилка ресурсов иногда используется для хранения метаданных файла, хотя ее также можно использовать для хранения фактических данных, как это было в случае с файлами шрифтов в классических операционных системах Mac. Обратите внимание, что файловые системы Macintosh также имеют отдельную область для метаданных, отличную от вилки данных или ресурсов. Поскольку он является частью записи каталога для файла, получить к нему доступ намного быстрее. Однако объем хранимых здесь данных минимален, это только временные метки создания и модификации, тип файла и коды создателя, длина вилки и имя файла. У некоторых файлов есть только вилка ресурса. Классические приложения 68k являются одним из примеров, где даже исполняемый код содержится в ресурсах типа «CODE». Более поздние двоичные файлы PowerPC сохраняют исполняемый код в ответвлении данных.

Поскольку вилки ресурсов поддерживаются только в файловых системах HFS, HFS Plus и APFS, их нельзя использовать в операционных системах, использующих другие файловые системы. В настоящее время HFS поддерживается только операционной системой Macintosh, а это означает, что только машины под управлением Mac OS могут использовать вилки ресурсов. Даже в системе Mac OS, вилы ресурса не могут быть использованы , если система Unix File была установлена . В файловой системе HFS Plus, которая в настоящее время является системой, наиболее часто используемой в Mac OS, можно настроить параметры, позволяющие другим ветвям в дополнение к ветвям данных и ресурсов создавать приложение с несколькими ветвями. Однако, поскольку вилки могут затруднить обмен файлами с другими операционными системами, эта функция не используется широко. Даже в macOS вилки ресурсов используются редко.

В настоящее время macOS поддерживает вилки ресурсов в общих папках SMB Windows , создавая скрытый файл с символами «._», добавленными в начало имени файла, в том же каталоге, что и файл вилки данных.

Идентификаторы ресурсов

Каждый ресурс имеет OSTYPE идентификатор (значение четыре байта) и идентификатор (а подписано 16-битное слово ), а также дополнительное имя. Существуют стандартизированные типы ресурсов для диалоговых окон (' DITL), изображений (' PICT'), звуков (' snd ') и даже для исполняемых двоичных файлов (' CODE'), которые до появления процессора PowerPC без исключения хранились в ресурсе. вилка. Подпрограммы для рендеринга окон хранятся в собственном типе ресурсов (' '), подпрограммы для рендеринга меню - в своих (' '), и если есть тип данных, который, по вашему мнению, не соответствует ни одной из стандартизованных категорий, вы можете просто также используйте собственный тип (например, " ") - фактически любые четыре символа или 32-битное значение могут служить типом ресурса. Такая компоновка позволяла пользователям легко настраивать не только отдельные приложения, но и саму операционную систему, используя такие инструменты, как ResEdit, для изменения ресурсов файла приложения или любого из системных файлов. WDEFMDEFJohn

В приложении или другом коде ресурсы могут быть загружены просто с использованием комбинации их типа, идентификатора или имени, независимо от того, как и где они хранятся в ответвлении ресурсов. Клиенту возвращается дескриптор загруженного ресурса, к которому затем можно получить доступ, как и к любым другим данным на основе кучи. Компонент ОС, который способствует этому, - диспетчер ресурсов . Помимо абстрагирования деталей хранилища данных от самих данных, Resource Manager также упорядочивает наборы открытых вилок ресурсов в стек, причем последний открытый файл находится наверху. При попытке загрузить ресурс он сначала смотрит в верхнюю часть стека (возможно, в ветвь ресурсов текущего документа), затем в следующую вниз (ветвь ресурсов приложения), а затем в следующую (ветвь системных ресурсов). Эта схема очень эффективна - она ​​позволяет локальным ресурсам переопределять более глобальные, расположенные ниже, поэтому приложение может предоставлять свои собственные значки или шрифты, например, вместо стандартных системных. Это также позволяет приложению загружать ресурсы из системы, используя тот же API, что и любой другой ресурс, независимо от того, где и как хранится этот ресурс - для приложения все ресурсы одинаково доступны и просты в использовании. Система резервирует идентификаторы ресурсов в определенном диапазоне, чтобы избежать конфликтов ресурсов, возникающих из-за этого. API-интерфейсы Resource Manager позволяют программисту управлять стеком и изменять поведение поиска.

Редактирование вилок ресурсов

Поскольку вилку ресурсов можно редактировать с помощью редактора ресурсов, такого как ResEdit , ее можно использовать для локализации и настройки программного обеспечения . Кроме того, большинство редакторов ресурсов позволяют визуально редактировать данные. В macOS можно использовать ресурсы при разработке приложения. Однако, если приложение может потребоваться для использования в UFS , его также можно настроить таким образом, чтобы вся ветвь ресурсов перемещалась в вилку данных, используя параметр Raw Resource File. В интегрированной среде разработки распределенная бесплатно, Apple Inc. , которые включают в себя MPW и инструменты компании Apple для разработчиков , включает в себя компилятор под названием Rez. При этом используется специальный язык, также называемый Rez, который можно использовать для создания вилки ресурсов путем компиляции исходного кода . Также включен декомпилятор DeRez, который можно использовать для преобразования вилки ресурсов обратно в код Rez.

В структуре ответвления ресурсов есть часть данных, называемая «картой ресурсов», в которой хранятся позиции элементов данных ресурсов. Это можно использовать для разрешения произвольного доступа к данным ресурса на основе определенных идентификаторов и имен. Ответвление ресурсов можно рассматривать как состоящее по существу из двух объектов: карты ресурсов и самих данных ресурсов, но на самом деле каждый тип данных представляет собой иерархическую структуру, в которой хранятся несколько элементов данных. Формат, в котором хранится информация в данных ресурса, определяется на основе типов информации, которые известны как «типы ресурсов». Данные о ресурсах часто ссылаются на другие типы данных.

В MacOS, вилы названы файл /..namedfork/ forkname , например , ресурс вилок файл IMG_0593.jpg IMG_0593.jpg является / .. namedfork / Rsrc. Команда lsподдерживает -l@параметр, в котором перечислены вилки файла.

Как осуществляется доступ к ресурсной вилке

Вилки ресурсов отображаются как расширенный атрибут com.apple.ResourceFork.

Раньше доступ к вилкам ресурсов осуществлялся через API Resource Manager . Этот API устарел.

В устаревшем API:

  1. При доступе к ответвлению ресурса данные, включая начальную позицию и длину данных ресурса и карту ресурсов, считываются из заголовка.
  2. Если указан тип ресурса для чтения, выполняется проверка, чтобы убедиться, что этот тип присутствует в списке ресурсов, а также количество элементов данных, содержащих этот тип, и их смещения в списке ссылок на ресурсы от начальной позиции карта ресурсов найдена.
  3. Находится идентификатор ресурса, смещение имени ресурса, свойства ресурса и смещение данных от начальной позиции данных ресурса.
  4. Если данные ресурса с указанным идентификатором или именем присутствуют в данных ресурса, осуществляется доступ к полученному выше смещению, определяется длина данных, и все данные, хранящиеся там, считываются и возвращаются как возвращаемое значение.

API-интерфейсы диспетчера файлов, такие как PBOpenRF()также разрешенный доступ к вилке необработанных ресурсов; однако их следует использовать только для таких приложений, как копирование файла - Apple категорически предостерегает от использования вилки ресурсов в качестве «второй вилки данных».

Из интерфейса POSIX к вилке ресурсов можно было получить доступ как filename/..namedfork/rsrcили как filename/rsrc; более короткая форма устарела в Mac OS X v10.4 и полностью удалена в Mac OS X v10.7 .

Типы данных в ответвлении ресурса

Наименьшие элементы, составляющие вилку ресурса, называются типами данных. Есть несколько типов данных. После доступа к ответвлению ресурса его содержимое можно найти, прочитав его в соответствии с типами данных, определенными заранее. Размещение определений внутри программы, в которых указывается, как должны обрабатываться данные, также позволяет хранить ресурсы, называемые ресурсами TMPL. Использование этого метода увеличивает видимость данных при просмотре в такой программе, как ResEdit, что упрощает последующее редактирование. Поскольку платформа Macintosh основана на процессорах Motorola (68k и PPC), данные сериализуются на диск в формате big-endian .

Ниже приводится список основных типов данных в алфавитном порядке.

Тип данных настоящее имя Описание
BBIT двоичный бит Представляет один логический бит (истина или ложь). Обычно количество BBIT должно быть кратно 8.
BOOL логический Представляет логическое значение. Он состоит из 2 байтов; 256 - истина, а 0 - ложь.
СИМВОЛ персонаж Представляет однобайтовый символ.
CSTR Строка C Представляет строку формы, используемой в языке программирования C : строку байтов с завершающим нулем .
DLNG десятичное длинное слово целое Десятичное длинное слово (4-байтовое целое). Представляет значения от примерно 2,1 до 2,1 миллиарда.
HEXD шестнадцатеричный дамп Указывает, что данные от этой позиции до конца являются шестнадцатеричными. Это используется для представления ресурсов кода или сжатых данных.
HLNG длинное шестнадцатеричное слово Эти данные обрабатываются как 4-байтовое шестнадцатеричное значение. Он используется, среди прочего, для представления целых чисел, превышающих 2,1 миллиарда, таких как беззнаковые длинные значения в C.
PSTR Строка Паскаля Представляет строку Паскаля, причем первый байт указывает длину строки.
TNAM имя типа Строка, представляющая значение, такое как код создателя , который всегда имеет длину 4 байта.
RECT прямоугольник Представляет координаты углов прямоугольника (сверху, слева, снизу, справа). Всегда 8 байтов.

Основные типы ресурсов

Приведенные ниже коды типов, как и приведенные выше типы данных, используются как идентификаторы типов не только для самих вилок ресурсов: они используются для идентификации самих файлов, описания данных в буфере обмена и многого другого.

Обратите внимание, что типы должны быть длиной 4 байта, поэтому такие типы, как snd и STR, на самом деле имеют пробел (0x20) в конце.

Название типа ресурса настоящее имя Описание
Алис псевдоним Сохраняет псевдоним другого файла в ответвлении ресурса файла, для которого установлен бит атрибута alias.
ALRT тревога Определяет форму окна предупреждения приложения
ПРИЛОЖЕНИЕ заявление Хранит информацию о приложении
BNDL пучок Определяет данные, такие как значок типа файла, используемый в приложении.
cicn цветной значок Определяет цветной значок, используемый в данных
сцепление таблица соответствия цветов Определяет цветовую палитру, используемую в данных
CNTL контроль Определяет детали компонента, расположенного в окне
КОД кодовый ресурс Хранит машинный код программы
CURS курсор Определяет форму монохромного курсора (квадрат 8 × 8 бит)
DITL список элементов диалога Определяет компонент окна
DLOG диалог Определяет форму диалогового окна для приложения
FREF ссылка на файл Определяет тип файла, обрабатываемый приложением
hfdr значок всплывающая подсказка Определяет содержание и форму всплывающей подсказки, отображаемой при наведении курсора на файл в Finder.
icl8 Список 8-битных значков Определяет значок, отображаемый в Finder
icns 32-битный список значков Определяет значок, отображаемый в Finder
ЗНАЧОК значок Определяет монохромный элемент, используемый в данных
Добрый описание файла Определяет описание типа файла
МБАР строка меню Определяет меню и строку меню для приложения
MDEF определение меню Определяет меню для приложения. Также может использоваться для определения меню сложной формы, например цветовой палитры.
МЕНЮ меню Определяет пункты меню в приложении
MooV кино Сохраняет фильм QuickTime
открытым открытым Определяет тип файла, который может открывать приложение
ИЗОБРАЖЕНИЕ рисунок Сохраняет изображение PICT, содержащееся в файле
PREF предпочтение Сохраняет настройки среды для приложения
snd звук Сохраняет звук, использованный в файле
STR нить Сохраняет строковые или шестнадцатеричные данные, используемые в файле
STR № список строк Сохраняет несколько строк, используемых в файле
стиль стиль Определяет информацию о стиле, такую ​​как шрифт, цвет и размер текста.
ТЕКСТ текст Сохраняет текст
TMPL шаблон Определяет формат данных ресурса
vers версия Определяет версию или регион использования файла
WDEF определение окна Определяет окно для приложения. Также могут быть определены окна неопределенной формы.
ВЕТЕР окно Определяет форму окна приложения

Редакторы основных ресурсов

ResEdit
Распространяется Apple бесплатно. Может использоваться для визуального редактирования данных ресурса. Если структура данных известна, она может отображать ряд различных типов данных в визуальном формате. Не работает на современных macOS.
Колдун
Дорого, но популярно, поскольку его можно использовать для визуального редактирования гораздо большего числа типов данных, чем ResEdit.
HexEdit
Бинарный редактор, который на самом деле обычно используется больше для редактирования вилки данных, чем вилки ресурсов.
ResKnife
Редактор с открытым исходным кодом для Mac OS X ; больше не поддерживается.
Rezycle
Инструмент macOS, который извлекает ресурсы из вилки ресурсов в отдельные двоичные файлы, конвертируя многие типы в форматы, подходящие для современной разработки.
resource_dasm
Программа извлечения ресурсов с открытым исходным кодом для macOS, также способная конвертировать многие ресурсы в современные форматы.

Проблемы совместимости

Сложность программирования с помощью вилок ресурсов привела к проблемам совместимости при доступе к другим файловым системам через протоколы совместного использования файлов, такие как AFP , SMB , NFS и FTP , при хранении на томах, отличных от HFS, или при передаче файлов в другие системы другими способами ( например, по электронной почте). Протокол AFP изначально поддерживает вилки ресурсов, поэтому вилки ресурсов обычно передаются на эти тома как есть и хранятся на сервере прозрачно для клиентов. Протокол SMB поддерживает систему метаданных файлов, аналогичную форкам Macintosh, известную как альтернативные потоки данных (далее ADS). macOS не поддерживала хранение вилок ресурсов в ADS на томах SMB по умолчанию до Mac OS X v10.6 . В предыдущих версиях ОС, включая обновленные версии 10.6, эту функцию можно было включить, изменив параметр или создав специальный файл.

Сетевые протоколы совместного использования файлов, такие как NFSv3 и FTP, не имеют концепции метаданных файлов, поэтому нет возможности хранить вилки ресурсов в исходном виде. Это также верно при записи в определенные типы локальных файловых систем, включая UFS, и на томах SMB, где не включена поддержка альтернативного потока данных. В этих случаях macOS хранит метаданные и вилки ресурсов, используя технику под названием AppleDouble , в которой вилка данных записывается как один файл, а вилка ресурсов и метаданные записываются как полностью отдельный файл, которому предшествует соглашение об именах "._". Например: ExampleFile.psd будет содержать вилку данных, а ._ExampleFile.psd будет содержать вилку ресурса и метаданные.

Проблемы совместимости могут возникнуть из-за того, что macOS будет по-разному обрабатывать хранилище вилок ресурсов в зависимости от версии macOS, настроек и типа файловой системы. Например, в сети SMB со смесью клиентов 10,5 и 10,6. Недавно установленный клиент 10.6 будет искать и сохранять вилки ресурсов на томе SMB в ADS, но клиент 10.5 (по умолчанию) игнорирует ADS и использует формат AppleDouble для обработки вилок. Если файловый сервер поддерживает как AFP, так и NFS, то клиенты, использующие NFS, будут хранить файлы в формате AppleDouble , тогда как пользователи AFP сохранят вилку ресурсов изначально. В таких случаях совместимость иногда можно поддерживать, заставляя клиентов использовать или не использовать формат AppleDouble .

Многие файловые серверы, обеспечивающие поддержку AFP, изначально не поддерживают вилки ресурсов в своих локальных файловых системах. В этих случаях вилки могут храниться особыми способами, такими как файлы со специальными именами, специальные каталоги или даже альтернативные потоки данных.

Другой проблемой является сохранение вилок ресурсов при передаче файлов с использованием приложений, не поддерживающих вилки ресурсов, или с помощью определенных методов передачи, включая электронную почту и FTP. Для этого был создан ряд форматов файлов, таких как MacBinary и BinHex . Системные инструменты командной строки SplitForksи FixupResourceForksпозволяют вручную выравнивать и объединять вилки ресурсов. Кроме того, файловый сервер, стремящийся представить файловые системы клиентам Macintosh, должен поддерживать вилку ресурсов, а также вилку данных файлов; Серверы UNIX, обеспечивающие поддержку AFP, обычно реализуют это со скрытыми каталогами.

У старых приложений, написанных с помощью Carbon API, есть потенциальная проблема при переносе на текущие компьютеры Intel Mac. Хотя диспетчер ресурсов и операционная система знают, как правильно десериализовать данные для общих ресурсов, таких как ' snd ' или ' moov', ресурсы, созданные с использованием ресурсов TMPL, необходимо поменять местами вручную, чтобы обеспечить совместимость файлов между версиями приложения на базе PPC и Intel. (Хотя карта ресурсов и другие детали реализации имеют прямой порядок байтов , диспетчер ресурсов сам по себе ничего не знает о содержимом универсального ресурса и поэтому не может выполнять замену байтов автоматически.)

До появления Mac OS X v10.4 стандартные утилиты командной строки UNIX в macOS (такие как cpи mv) не поддерживали вилки ресурсов. Для копирования файлов с помощью вилок ресурсов приходилось использовать dittoлибо CpMac, либо MvMac.

Другие операционные системы

Концепция диспетчера ресурсов графических объектов для экономии памяти возникла в пакете OOZE на Xerox Alto в Smalltalk-76. Эта концепция теперь в значительной степени универсальна для всех современных операционных систем. Однако концепция ресурсной вилки остается специфической для Macintosh. В большинстве операционных систем используется двоичный файл, содержащий ресурсы, который затем «прикрепляется» к концу существующего программного файла. Это решение используется, например, в Microsoft Windows , и аналогичные решения используются в системе X Window , хотя ресурсы часто остаются в виде отдельного файла.

NT Windows , NTFS может поддерживать вилки (и поэтому может быть файловым сервером для Mac - файлов), нативная функция , обеспечивающая , что поддержка называется альтернативным потоком данных . Функции операционной системы Windows (например, стандартная вкладка «Сводка» на странице «Свойства» для файлов, не относящихся к Office) и приложения Windows используют их, и Microsoft разрабатывала файловую систему следующего поколения , в основе которой лежат такие функции.

Ранние версии BeOS реализовали базу данных в файловой системе, которую можно было использовать аналогично разветвлению ресурсов. Проблемы с производительностью привели к изменению в более поздних выпусках системы сложных атрибутов файловой системы. В рамках этой системы ресурсы обрабатывались более аналогично Mac.

AmigaOS не использует разветвленные файлы. Его исполняемые файлы внутренне разделены на модульную структуру больших кусков ( ломоть ) , способных хранить код, данные и дополнительную информацию. Точно так же файлы данных и проектов имеют структуру фрагментов, кодифицированную в стандарте IFF . Другие типы файлов хранятся аналогично другим операционным системам. Хотя AmigaOS не является строго ответвлением ресурсов, она хранит метаданные в файлах, известных как .infoфайлы. .infoфайлы можно идентифицировать по .infoрасширению; например, если вы сохраните проект на диск, будут сохранены два файла, MyProjectи MyProject.info. MyProjectбудет фактическими данными проекта и MyProject.infoбудет содержать значок проекта, информацию о том, какая программа необходима для открытия проекта (поскольку в AmigaOS нет привязки к приложению ), специальные параметры проекта и любые комментарии пользователей. .infoфайлы не видны на рабочем столе Amiga ( Workbench ). Значок на рабочем столе, взятый из самого .infoсебя, является метафорой интерфейса, через которую пользователь взаимодействует как с самим проектом, так и с связанным с ним .infoфайлом. Диалоговое окно, доступное по щелчку правой кнопкой мыши по значку, позволяет пользователю просматривать и изменять метаданные, присутствующие в .infoфайле. .infoфайлы можно рассматривать как отдельные файлы в интерфейсе командной строки или файловом менеджере . Современные клоны AmigaOS ( AROS , MorphOS и AOS4 ) наследуют структуру (вместе с метаданными) .infoфайлов старых версий AmigaOS, а также могут принимать стандартные графические файлы PNG в качестве растровых изображений значков в своих .infoфайлах.

Операционные системы NeXT NeXTSTEP и OPENSTEP , их преемник, macOS и другие системы, такие как RISC OS, реализовали другое решение. В этих системах ресурсы остаются в исходном формате, например, изображения включаются как полные файлы TIFF, а не кодируются в какой-то контейнер. Эти ресурсы затем помещаются в каталог вместе с исполняемым кодом и «необработанными данными». Каталог (называемый « пакетом » или « каталогом приложения ») затем представляется пользователю как само приложение. Это решение обеспечивает все те же функции, что и вилка ресурсов, но позволяет легко манипулировать ресурсами из любого приложения - «редактор ресурсов» (например, ResEdit ) не требуется. В интерфейсе командной строки пакет выглядит как обычный каталог. Такой подход не подходил для классической Mac OS , поскольку файловая система ( MFS ) не поддерживала отдельные каталоги каталогов. Когда поддержка файлов каталога была включена в Mac OS с файловой системой HFS, вилка ресурсов была сохранена. macOS сохраняет классический API диспетчера ресурсов как часть своих библиотек Carbon для обратной совместимости. Однако сами ресурсы теперь могут храниться в отдельных файлах данных в файловой системе - диспетчер ресурсов теперь скрывает это изменение реализации от клиентского кода.

Смотрите также

использованная литература

внешние ссылки