Jump to content

ар (Unix)

(Перенаправлено с Ar (формат файла) )
с
Оригинальный автор(ы) Кен Томпсон ,
Деннис Ричи
( AT&T Bell Laboratories )
Разработчик(и) Различные с открытым исходным кодом и коммерческие разработчики разработчики
Первоначальный выпуск 3 ноября 1971 г .; 52 года назад ( 1971-11-03 )
Написано в С
Операционная система Unix , Unix-подобные , V , Plan 9 , Inferno
Платформа Кросс-платформенный
Тип Команда
Лицензия План 9: МОЯ лицензия
формат архива
Расширение имени файла
, .либ , [1]
Тип интернет-СМИ
приложение/x-архив [1]
Магическое число !<арка>
Тип формата формат архива
Контейнер для обычно объектные файлы ( )
Стандартный Не стандартизировано, существует несколько вариантов.
Открытый формат ? Да [2]

Архиватор файл , также известный как ar , представляет собой утилиту Unix , которая поддерживает группы файлов как один архивный . Сегодня, ar обычно используется только для создания и обновления файлов статических библиотек , которые использует редактор ссылок или компоновщик , а также для создания пакетов .deb для семейства Debian ; его можно использовать для создания архивов для любых целей, но он в значительной степени заменен tar для целей, отличных от статических библиотек. [3] Реализация ar включен как один из GNU Binutils . [2]

В стандартной базе Linux (LSB) ar объявлен устаревшим и, как ожидается, исчезнет в будущем выпуске этого стандарта. Обоснование заключалось в том, что «LSB не включает утилиты разработки программного обеспечения и не определяет форматы файлов .o и .a». [4]

Подробности формата файла [ править ]

Диаграмма, показывающая пример файловой структуры файла .deb.

Формат ar никогда не был стандартизирован; современные архивы основаны на общем формате с двумя основными вариантами: BSD и System V (первоначально известный как COFF , а также используемый GNU , ELF и Windows ).

Исторически были и другие варианты. [5] включая V6 , V7 , AIX (маленький и большой) и Coherent, которые значительно отличаются от общего формата. [6]

Архивы Debian " .deb " используют общий формат.

Файл ar начинается с глобального заголовка , за которым следуют заголовок и раздел данных для каждого файла, хранящегося в файле ar.

Каждая секция данных выровнена по 2 байта. Если он заканчивается на нечетном смещении, в качестве заполнителя используется символ новой строки ('\n', 0x0A).

Подпись файла [ править ]

Подпись файла представляет собой одно поле, содержащее магическую строку ASCII. "!<arch>" за которым следует один управляющий символ LF (0x0A).

Заголовок файла [ править ]

Каждый файл, хранящийся в архиве AR, включает заголовок файла для хранения информации о файле. Общий формат следующий. Числовые значения кодируются в ASCII, и все значения дополняются справа пробелами ASCII (0x20).

Компенсировать Длина Имя Формат
0 16 Идентификатор файла ASCII-код
16 12 Временная метка изменения файла (в секундах) Десятичный
28 6 Идентификатор владельца Десятичный
34 6 Идентификатор группы Десятичный
40 8 Режим файла (тип и разрешение) Восьмеричный
48 10 Размер файла в байтах Десятичный
58 2 Конечные символы 0x60 0x0A

Поскольку заголовки содержат только печатные символы ASCII и переводы строк, архив, содержащий только текстовые файлы, по-прежнему выглядит как текстовый файл.

Члены выравниваются по четным границам байтов. «Каждый элемент архивного файла начинается с четной границы байта; при необходимости между файлами вставляется новая строка. Тем не менее, указанный размер отражает фактический размер файла без учета заполнения». [7]

Из-за ограничений длины и формата имени файла в вариантах GNU и BSD были разработаны разные методы хранения длинных имен файлов. Хотя общий формат не страдает от проблемы 2038 года , многие реализации утилиты ar вносят изменения, и в будущем, возможно, их потребуется изменить для правильной обработки временных меток, превышающих 2147483647. Описание этих расширений можно найти в libbfd. [8]

В зависимости от формата многие реализации ar включают глобальную таблицу символов (также известную как ArmAP, каталог или индекс) для быстрого связывания без необходимости сканирования всего архива в поисках символа. POSIX распознает эту особенность и требует, чтобы реализации AR имели -s возможность его обновления. В большинстве реализаций его помещают в первую запись файла. [9]

Вариант BSD [ править ]

BSD ar хранит имена файлов, дополненные пробелами ASCII справа. Это вызывает проблемы с пробелами внутри имен файлов. 4.4BSD ar сохраняет расширенные имена файлов, помещая строку «#1/», за которой следует длина имени файла в поле имени файла, и сохраняя реальное имя файла перед разделом данных. [6]

Утилита BSD ar традиционно не занимается построением глобальной таблицы поиска символов и делегирует эту задачу отдельной утилите с именем ranlib . [10] который вставляет файл с именем, зависящим от архитектуры __.SYMDEF в качестве первого члена архива. [11] Некоторые потомки ставят пробел и «SORTED» после имени, чтобы указать отсортированную версию. [12] 64-битный вариант под названием __.SYMDEF_64 существует на Дарвине .

Поскольку в POSIX добавлено требование для -s в качестве замены ranlib, однако новые реализации BSD ar были переписаны, чтобы иметь эту функцию. FreeBSD, в частности, отказалась от формата таблиц SYMDEF и приняла таблицы в стиле System V. [13]

System V (or GNU) variant [ edit ]

Системная переменная использует символ «/» (0x2F) для обозначения конца имени файла; это позволяет использовать пробелы без использования расширенного имени файла. Затем он сохраняет несколько расширенных имен файлов в разделе данных файла с именем «//», на эту запись ссылаются будущие заголовки. Заголовок ссылается на расширенное имя файла, сохраняя «/», за которым следует десятичное смещение в начале имени файла в разделе данных расширенного имени файла. Формат этого файла "//" представляет собой просто список длинных имен файлов, каждое из которых разделено одним или несколькими символами LF. Обратите внимание, что десятичные смещения представляют собой количество символов, а не номер строки или строки в файле «//». Обычно это вторая запись в файле после таблицы символов, которая всегда является первой.

System V ar использует специальное имя файла «/», чтобы обозначить, что следующая запись данных содержит таблицу поиска символов, которая используется в библиотеках ar для ускорения доступа. Эта таблица символов состоит из трех частей, которые записываются вместе как смежные данные.

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

Некоторые системы System V не используют описанный выше формат таблицы поиска символов. В таких операционных системах, как HP-UX 11.0, эта информация хранится в структуре данных на основе формата файла SOM .

Специальный файл «/» не заканчивается определенной последовательностью; конец предполагается после прочтения последнего имени символа.

Чтобы преодолеть ограничение размера файла в 4 ГиБ, некоторые операционные системы, такие как Solaris 11.2 и GNU, используют вариантную таблицу поиска. Вместо 32-битных целых чисел в таблицах поиска символов используются 64-битные целые числа. Строка «/SYM64/» вместо «/» используется в качестве идентификатора этой таблицы. [14]

Вариант для Windows [ править ]

Вариант Windows (PE/COFF) основан на варианте SysV/GNU. Первая запись «/» имеет тот же макет, что и таблица символов SysV/GNU. Вторая запись — это еще один «/», расширение Microsoft, в котором хранится расширенная таблица перекрестных ссылок символов. Этот отсортирован и использует целые числа с прямым порядком байтов. [5] [15] Третья запись — это необязательные данные длинного имени «//», как в SysV/GNU. [16]

Тонкий архив [ править ]

Версия ar в GNU binutils и Elfutils есть дополнительный формат «тонкого архива» с магическим числом. !<тонкий> . Тонкий архив содержит только таблицу символов и ссылки на файл. Формат файла по сути представляет собой архив формата System V, где каждый файл хранится без разделов данных. Каждое имя файла сохраняется как «длинное» имя файла, и оно должно разрешаться так, как если бы оно было символической ссылкой . [17]

Пример использования [ править ]

Создать архив из файлов класс1.о , класс2.о , class3.o , будет использована следующая команда:

ar rcs libclass.a class1.o class2.o class3.o

Линкеры Unix, обычно вызываемые через C. компилятор cc, умею читать ar файлы и извлекать объектные файлы , поэтому, если из них libclass.a представляет собой архив, содержащий class1.o, class2.o и class3.o, затем

cc main.c libclass.a

или (если libclass.a находится в пути к стандартной библиотеке, например /usr/local/lib )

cc main.c -lclass

или (во время связывания)

ld ... main.o -lclass ...

то же самое, что:

cc main.c class1.o class2.o class3.o

См. также [ править ]

Ссылки [ править ]

  1. ^ Jump up to: а б «приложение/x-архив» . Архивировано из оригинала 08.12.2019 . Проверено 11 марта 2019 г.
  2. ^ Jump up to: а б «ar(1) – справочная страница Linux» . Проверено 3 октября 2013 г.
  3. ^ «Статические библиотеки» . ТЛДП . Проверено 3 октября 2013 г.
  4. ^ Стандартная базовая спецификация Linux, версия 4.1, Глава 15. Команды и утилиты> ar
  5. ^ Jump up to: а б Левин, Джон Р. (2000) [октябрь 1999 г.]. «Глава 6: Библиотеки» . Линкеры и загрузчики . Серия Моргана Кауфмана по разработке программного обеспечения и программированию (1-е изд.). Сан-Франциско, США: Морган Кауфманн . ISBN  1-55860-496-0 . OCLC   42413382 . Архивировано из оригинала 5 декабря 2012 г. Проверено 12 января 2020 г. Код: [1] [2] Ошибки: [3]
  6. ^ Jump up to: а б Страница руководства для формата файла NET/2 ar
  7. ^ "аааа" . www.unix.com . Форумы UNIX и Linux.
  8. ^ «bminor/binutils-gdb: archive.c» . Гитхаб . 16 июля 2022 г.
  9. ^ ar – Справочник по оболочке и утилитам, Единая спецификация UNIX , версия 4 от Open Group.
  10. ^ Страница руководства для утилиты NET/2 ranlib.
  11. ^ Страница руководства для формата файла ranlib NET/2.
  12. ^ "ranlib.h" . opensource.apple.com .
  13. ^ ar(5) FreeBSD по форматам файлов Руководство
  14. ^ "ar.h(3HEAD)" . docs.oracle.com . Корпорация Оракл. 11 ноября 2014 года . Проверено 14 ноября 2018 г.
  15. ^ Пьетрек, Мэтт (апрель 1998 г.), «Under The Hood» , Microsoft Systems Journal , заархивировано из оригинала 24 июня 2007 г. , получено 23 августа 2014 г.
  16. ^ «llvm-mirror/llvm: archive.cpp (определение формата)» . Гитхаб . Проверено 10 февраля 2020 г.
  17. ^ "ар" . Двоичные утилиты GNU .

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 8bbe2db07d49e33b7bcaf9957e54695d__1690224720
URL1:https://arc.ask3.ru/arc/aa/8b/5d/8bbe2db07d49e33b7bcaf9957e54695d.html
Заголовок, (Title) документа по адресу, URL1:
ar (Unix) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)