Топ питань
Часова шкала
Чат
Перспективи
Ar (Unix)
утиліта UNIX для архівування З Вікіпедії, вільної енциклопедії
Remove ads
ar, (скорочення від англ. archiver) -- утиліта Unix-подібних операційних системах, призначена для групування файлів у вигляді єдиного архівного файлу . Сьогодні ar
зазвичай використовується лише для створення та оновлення статичних бібліотечних файлів, які використовує редактор посилань або компонувальник, а також для створення пакетів .deb для сімейства Debian; його можна використовувати для створення архівів для будь-яких цілей, але він був значною мірою замінений на tar
для цілей, відмінних від статичних бібліотек. [2] Реалізацію ar
містить пакет з GNU Binutils . [3]
У Linux Standard Base (LSB) ar
застарів і, як очікується, зникне в майбутньому випуску цього стандарту. Надане обґрунтування полягало в тому, що «LSB не включає утиліти розробки програмного забезпечення та не визначає формати файлів .o та .a».
Remove ads
Деталі формату файлу
Узагальнити
Перспектива

Формат ar ніколи не був стандартизований; сучасні архіви базуються на загальному форматі з двома основними варіантами, BSD і System V.
Історично існували інші варіанти включаючи V6, V7, AIX (маленький і великий) і Coherent, які суттєво відрізняються від загального формату.
Загальний формат використовується також у архівах Debian (.deb).
Файл ar починається з глобального заголовка, за яким йдуть заголовок і розділ даних для кожного файлу, що зберігається в ар-файлі.
Кожен розділ даних вирівняний по 16-бітній границі. Якщо він закінчується на непарному зміщенні, заповнювачем слугує символ нового рядка ('\n', 0x0A).
Сигнатура файлу
Підпис файлу — це одне поле, що містить "магічну ASCII-послідовність" "!<arch>"
за яким слід один керуювальний символ LF (0x0A).
Заголовок файлу
Кожен файл, що зберігається в архіві ar, містить заголовок файлу для зберігання інформації про файл. Загальний формат виглядає наступним чином. Числові значення закодовано в ASCII, і всі значення доповнюються праворуч пробілами ASCII (0x20).
Оскільки заголовки містять лише друковані символи ASCII і переводи рядків, архів, що містить лише текстові файли, все одно виглядає як текстовий файл.
Члени вирівнюються за парними межами байтів. «Кожен елемент архівного файлу починається з парної межі байтів; якщо необхідно, між файлами вставляється новий рядок. Тим не менше, наведений розмір відображає фактичний розмір файлу без урахування відступів». [4]
Через обмеження довжини і формату імен файлів у варіантах GNU і BSD були розроблені різні методи зберігання довгих імен файлів. Незважаючи на те, що загальний формат не страждає від проблеми 2038 року, багато реалізацій утиліти ar несумісні з прийнятим зараз 64-розрядним кодуванням дати і, можливо, їх доведеться змінити у майбутньому, щоб правильно обробляти лічильники секунд, що перевищують 2147483647. Опис цих розширень можна знайти в libbfd. [5]
Залежно від формату, багато реалізацій ar включають глобальну таблицю символів (вона ж armap, каталог або індекс) для швидкого зв’язування без необхідності сканувати весь архів на наявність символу. POSIX розпізнає цю функцію та вимагає, щоб реалізації ar мали опцію -s
для її оновлення. Більшість реалізацій розміщують його в першому елементі. [6]
BSD варіант
BSD ar зберігає імена файлів, доповнені пробілами ASCII справа. Це спричиняє проблеми з пробілами всередині імен файлів. 4.4BSD ar зберігає розширені імена файлів, розміщуючи рядок "#1/", за яким слідує довжина імені файлу в полі імені файлу, і зберігаючи справжню назву файлу перед розділом даних.
Утиліта BSD ar традиційно не займається створенням глобальної таблиці пошуку символів і делегує це завдання окремій утиліті під назвою ranlib, яка вставляє специфічний для архітектури файл під назвою __.
SYMDEF
як перший член архіву. Деякі нащадки ставлять пробіл і «SORTED» після імені, щоб вказати відсортовану версію. [7] 64-розрядний варіант під назвою __.SYMDEF_64
__.SYMDEF_64
існує у ОС Darwin .
Оскільки POSIX додав вимогу для опції -s
як заміну ranlib, проте новіші реалізації BSD ar були переписані, щоб мати цю функцію. FreeBSD, зокрема, відмовилася від формату таблиці SYMDEF і прийняла таблицю стилю System V. [8]
Варіант System V (або GNU)
Програма ar у Unix System V використовує символ '/' (0x2F) для позначення кінця назви файлу; це дозволяє використовувати пробіли без використання розширеного імені файлу. Потім він зберігає кілька розширених імен файлів у розділі даних файлу з назвою "//", на цей запис посилаються майбутні заголовки. Заголовок посилається на розширене ім’я файлу, зберігаючи «/» з наступним десятковим зміщенням на початку імені файлу в розділі даних розширеного імені файлу. Сам формат цього файлу «//» — це просто список довгих імен файлів, кожне з яких розділено одним або кількома символами LF. Зауважте, що десяткові зміщення – це кількість символів, а не номер рядка чи рядка у файлі "//". Зазвичай це другий запис у файлі після таблиці символів, яка завжди є першою.
System V ar використовує спеціальну назву файлу "/", щоб позначити, що наступний запис даних містить таблицю пошуку символів, яка використовується в бібліотеках ar для прискорення доступу. Ця таблиця символів складається з трьох частин, які записуються разом як безперервні дані.
- 32-розрядне ціле число big-endian, що вказує кількість записів у таблиці.
- Набір 32-розрядних цілих чисел big-endian. По одному для кожного символу, записуючи позицію в архіві заголовка для файлу, що містить цей символ.
- Набір рядків, що завершуються нулем. Кожен є іменем символу, і зустрічається в тому ж порядку, що й список позицій у частині 2.
Деякі системи System V не використовують формат, описаний вище, для таблиці пошуку символів. Для таких операційних систем, як HP-UX 11.0, ця інформація зберігається в структурі даних на основі формату файлу SOM .
Спеціальний файл "/" не завершується певною послідовністю; кінцем вважається ситуація, коли було прочитано ім'я останнього символу.
Щоб подолати обмеження розміру файлу в 4 ГіБ, деякі операційні системи, такі як Solaris 11.2 і GNU, використовують таблицю пошуку варіантів. Замість 32-розрядних цілих чисел у таблицях пошуку символів використовуються 64-розрядні цілі числа. Рядок "/SYM64/" замість "/" використовується як ідентифікатор для цієї таблиці [9]
Варіант Windows
Варіант Windows (PE/COFF) базується на варіанті SysV/GNU. Перший запис "/" має такий же макет, що й таблиця символів SysV/GNU. Другий запис — ще один «/», розширення Microsoft, яке зберігає розширену таблицю перехресних посилань символів. Ця таблиця відсортована і використовує цілі числа little-endian. [10] Третій запис — необов’язкові дані довгого імені «//», як у SysV/GNU. [11]
«Тонкий архів»
Версія ar
у GNU binutils та Elfutils має додатковий формат «тонкого архіву» з магічним числом!<thin> <тонкий> . Тонкий архів містить лише таблицю символів і посилання на файл. Формат файлу — це, по суті, архів формату System V, де кожен файл зберігається без розділів даних. Кожне ім'я файлу зберігається як "довге" ім'я файлу, і їх потрібно розпізнавати так, ніби це символічні посилання . [12]
Remove ads
Приклад використання
Для створення архіву з файлів class1.o , class2.o та 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
Remove ads
Див. також
Список літератури
Зовнішні посилання
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads