ar (Unix)

Da Wikipedia, l'enciclopedia libera.

L'archiver (noto anche come ar) è un tool Unix che mantiene gruppi di file come un unico file di archivio. Oggi, 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[modifica | modifica sorgente]

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[modifica | modifica sorgente]

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[modifica | modifica sorgente]

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

Intestazione di File[modifica | modifica sorgente]

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 limitazione sulla lunghezza e il formato dei file, sia la varianti GNU e BSD utilizzano metodi differenti per raggiungere nomi di file estesi.

Variante BSD[modifica | modifica sorgente]

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[modifica | modifica sorgente]

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[modifica | modifica sorgente]

Collegamenti esterni[modifica | modifica sorgente]