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 fromField Offset toField NameField Format015File nameASCII1627File dateDecimal2833Owner IDDecimal3439Group IDDecimal4047File modeOctal4857File size in bytesDecimal5859Header 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 deb Compressione dei dati tar (software)
Altri progetti
Collegamenti esterni
Categoria:Binutils Categoria:Comandi Unix