Share to: share facebook share twitter share wa share telegram print page

Ar (Unix)

L'archiver (noto anche come ar) è un tool Unix che mantiene gruppi di file come un unico file di archivio. Attualmente ar è solitamente utilizzato per creare ed aggiornare solamente file di libreria che il linker usa. Possono essere utilizzati per creare archivi di ogni genere, ma è stato generalmente rimpiazzato dal formato di file tar per scopi che vanno oltre il linking di librerie. ar è incluso come una delle GNU Binutils.

Esempi

Per esempio, per creare un archivio dai file class1.o, class2.o, class3.o, bisogna usare il seguente comando:

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

per compilare un programma che dipende da class1.o, class2.o, and class3.o si può fare:

cc main.c -L. -lclass

invece di:

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

Il parametro -L e -l istruisce il linker per cercare la libreria "libclass.a" nella directory corrente.

Dettagli sul formato del file

Il formato ar non è mai stato standardizzato, archivi recenti sono basati su un formato comune con due varianti conosciute, BSD e GNU.

Storicamente ci sono state altre varianti che includono AIX (small), AIX (big) e Coherent, variano significativamente dal formato comune.

Gli archivi deb usano il formato comune.

Un file ar inizia con una intestazione globale, seguita da una sezione di intestazione e dati per ogni file immagazzinato nel file ar.

La sezione di dati è allineata su 2 byte, se finisce con un formato dispari si riempie con un "\n".

Intestazione globale

L'intestazione globale è un singolo campo che contiene la stringa ASCII "!<arch>" seguita da un singolo carattere di controllo LF.

Intestazione di File

Il formato comune è come segue.

Field Offset from Field Offset to Field Name Field Format
0 15 File name ASCII
16 27 File date Decimal
28 33 Owner ID Decimal
34 39 Group ID Decimal
40 47 File mode Octal
48 57 File size in bytes Decimal
58 59 Header magic '\n

Per colpa delle limitazioni sulla lunghezza e il formato dei file, sia la varianti GNU che BSD utilizzano metodi differenti per raggiungere nomi di file estesi.

Variante BSD

Gli ar BSD immagazzinano i nomi dei file estesi piazzando la stringa "#1/" seguita dalla lunghezza del nome del file nel campo del nome del file, e aggiungono il vero nome del file nell'intestazione del file.

Variante GNU

Gli ar GNU immagazzinano più nomi di file estesi nella sezione dei dati con il nome "//", questo record si riferisce a intestazioni successive. Una intestazione referenzia un nome di file esteso immagazzinando un "/" seguito da uno spiazzamento decimale all'inizio del nome del file nella sezione dei dati del file esteso.

L'ar GNU usa un '/' per segnare la fine di un nome di file, questo permette l'uso di spazi senza l'uso di un filename esteso.

L'ar GNU usa il nome di file speciale "/ " per far notare che le seguenti informazioni sui dati contengono una tabella di lookup di simboli, che viene usata nelle librerie ar per velocizzarne l'accesso

Voci correlate

Altri progetti

Collegamenti esterni

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica
Kembali kehalaman sebelumnya