AR(4) AR(4) НАЗВАНИЕ ar - формат архивного файла СИНТАКСИС |#include ОПИСАНИЕ Команда ar(1) позволяет собрать несколько файлов в один архивный файл. Архивы используются в основном как биб- лиотеки объектных файлов, просматриваемые редактором связей ld(1). Каждый архив начинается с магической цепочки архива. |#define ARMAG "!\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]; /* Ограничитель заголовка */ |}; Заголовок элемента архива является чисто текстовым. Числовая информация хранится в десятичном виде, за иск- лючением ar_mode - восьмеричного режима доступа к эле- менту архива. Поэтому, если архив состоит из текстовых файлов, он и в целом является текстовым. Имя файла в поле ar_name заканчивается символом / и до- полняется пробелами. Поле ar_date содержит дату модифи- кации файла на момент его включения в архив. Архив обычного формата можно перемещать из системы в систему, используя команду ar(1). Для переноса архивов специаль- ных форматов их преобразуют к обычному формату пос- редством команды conv(1). Каждый элемент архива начинается с границы четного бай- та. Для этого между разделами, если нужно, вставляется символ перевода строки. Длина элемента в поле ar_size отражает точный размер без учета вставок. Если архив включает таблицу имен, первый файл архива имеет имя нулевой длины (ar_name [0] == '/') и содержит следующую информацию: 1. Количество имен (занимает 4 байта). 2. Массив смещений в архивном файле [занимает (4 * количество имен) байт]. 3. Таблица цепочек символов - имен элементов архива (занимает остаток файла). Таблица цепочек (ограниченных нулевым байтом) и массив смещений содержат равное число элементов. Каждое смеще- ние связано с соответствующей по порядку цепочкой. В таблице цепочек перечислены все глобальные имена, опре деленные во всех файлах архива. Смещение определяет по ложение архивного заголовка файла, содержащего данное глобальное имя. СМ. ТАКЖЕ a.out(4). ar(1), ld(1), strip(1) в Справочнике пользователя. ОГРАНИЧЕНИЯ Команда strip(1) удаляет все элементы таблицы имен. Для использования редактора связей ld(1) их надо восстано- вить с помощью команды ar -ts.