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

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

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

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

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

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

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

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

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

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

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

У каждого ресурса есть OSType идентификатор (четырехбайтовое значение) и идентификатор ( подписанный 16 бит слово ), а также необязательное имя. Существуют стандартизированные типы ресурсов для диалоговые окна ('DITL'), изображения ('ИЗОБРАЖЕНИЕ '), звуки (' snd ') - и даже для исполняемый файл двоичные файлы ('CODE'), которые до появления PowerPC процессор, без исключения хранились в вилке ресурсов. Подпрограммы для рендеринга окна хранятся в собственном типе ресурсов ('WDEF'), подпрограммы для рендеринга меню - в своих ('MDEF'), и если есть тип данных, который, по вашему мнению, не соответствует ни одной из стандартизованных категорий, вы также можете используйте свой собственный тип (например, «Джон») - фактически в качестве типа ресурса могут выступать любые четыре символа или 32-битное значение. Такое расположение позволило пользователям легко настраивать не только отдельные приложения, но и саму операционную систему, используя такие инструменты, как ResEdit для изменения ресурсов файла приложения или любого из системных файлов.

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

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

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

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

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

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

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

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

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

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

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

От POSIX интерфейс, к вилке ресурса можно получить доступ как имя файла/.. namedfork/rsrc или как имя файла/ rsrc; более короткая форма устарела в Mac OS X v10.4 и полностью удален в Mac OS X v10.7.[3]

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

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

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

Тип данныхнастоящее имяОписание
BBITдвоичный битПредставляет один логический бит (истина или ложь). Обычно количество BBIT должно быть кратно 8.
BOOLлогическийПредставляет логическое значение. Он состоит из 2 байтов; 256 - истина, а 0 - ложь.
СИМВОЛхарактерПредставляет однобайтовый символ.
CSTRC строкаПредставляет строку формы, используемой в Язык программирования 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
icns32-битный список значковОпределяет значок, отображаемый в 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, известную как Альтернативные потоки данных (Объявления здесь и далее). macOS не поддерживал хранение вилок ресурсов в ADS на томах SMB по умолчанию до тех пор, пока Mac OS X v10.6. В предыдущих версиях ОС, включая обновленные версии 10.6, эту функцию можно было включить, изменив параметр или создав специальный файл.[4]

Сетевые протоколы совместного использования файлов, такие как 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, были созданы, чтобы справиться с этим. Системные инструменты командной строки Сплитвилы и FixupResourceForks разрешить ручное выравнивание и объединение вилок ресурсов. Кроме того, файловый сервер, стремящийся представить файловые системы клиентам Macintosh, должен поддерживать вилку ресурсов, а также вилку данных файлов; UNIX серверы, обеспечивающие поддержку AFP, обычно реализуют это со скрытыми каталогами.

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

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

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

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

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

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

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

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

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

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

  1. ^ «Форки ресурсов Mac OS X». Получено 2012-10-22.
  2. ^ «Справочник по диспетчеру ресурсов». Получено 2012-10-22.
  3. ^ "Использование имен путей". developer.apple.com. 2002-12-18. Архивировано 18 декабря 2002 года.. Получено 2002-12-18.CS1 maint: BOT: статус исходного URL-адреса неизвестен (ссылка на сайт)
  4. ^ «OS X v10.5, v10.6: об именованных потоках на SMB-подключенных NAS, OS X и серверах Windows». Получено 2010-04-19.
  5. ^ «Ранняя история Smalltalk». Получено 2008-07-24.

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