AR(4)
НАЗВАНИЕ
ar - формат архивного файла
СИНТАКСИС
#include <ar.h>
ОПИСАНИЕ
Команда ar(1) позволяет собрать несколько файлов в один
архивный файл. Архивы используются в основном как библиотеки об ектных файлов, просматриваемые редактором
связей ld(1).
Каждый архив начинается с магической цепочки архива.
#define ARMAG "!<arch>\n" /* Магическая цепочка */
#define SAMARG 8 /* Длина магической цепочки */
Архив об ектных файлов обычного формата [см.a.out(4)]
включает таблицу имен архива. Она используется редактором связей ld(1) для определения того, какие элементы
архива должны быть включены в результирующую программу
при редактировании связей. Таблица имен архива (если
она есть) всегда является первым файлом архива, однако
не отображается при выдаче оглавления. Она автоматически порождается и корректируется командой ar(1).
За магической цепочкой архива следуют файлы - элементы
архива. Каждый элемент начинается с заголовка следующего формата:
#define ARFMAG "`\n" /* Ограничитель заголовка */
struct ar_hdr { /* Заголовок элемента архива */
char ar_name [16]; /* Имя элемента (в конце /) */
char ar_date [12]; /* Дата последней модификации */
char ar_uid [6]; /* Идентификатор владельца */
char ar_gid [6]; /* Идентификатор группы */
char ar_mode [8]; /* Режим элемента архива */
char ar_size; /* Длина элемента */
char ar_fmag [2]; /* Ограничитель заголовка */
};
1
Заголовок элемента архива является чисто текстовым.
Числовая информация хранится в десятичном виде, за исключением ar_mode - восьмеричного режима доступа к элементу архива. Поэтому, если архив состоит из текстовых
файлов, он и в целом является текстовым.
Имя файла в поле ar_name заканчивается символом / и дополняется пробелами. Поле ar_date содержит дату модификации файла на момент его включения в архив. Архивы
обычного формата можно перемещать из системы в систему,
используя команду ar(1). Для переноса архивов специальных форматов их преобразуют к обычному формату посредством команды conv(1).
Каждый элемент архива начинается с границы четного байта. Для этого между разделами, если нужно, вставляется
символ перевода строки. Длина элемента в поле ar_size
отражает точный размер без учета вставок.
Если архив включает таблицу имен, первый файл архива
имеет имя нулевой длины (ar_name [0] == '/') и содержит
следующую информацию:
- Количество имен (занимает 4 байта).
- Массив смещений в архивном файле [занимает (4 *
количество имен) байт].
- Таблица цепочек символов - имен элементов архива
(занимает остаток файла).
Таблица цепочек (ограниченных нулевым байтом) и массив
смещений содержат равное число элементов. Каждое смещение связано с соответствующей по порядку цепочкой. В
таблице цепочек перечислены все глобальные имена, определенные во всех файлах архива. Смещение определяет положение архивного заголовка файла, содержащего данное
глобальное имя.
СМ. ТАКЖЕ
a.out(4).
ar(1), ld(1), strip(1) в Справочнике пользователя.
ОГРАНИЧЕНИЯ
Команда strip(1) удаляет все элементы таблицы имен. Для
использования редактора связей ld(1) их надо восстановить с помощью команды ar -ts.