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
[modifica | modifica wikitesto]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 wikitesto]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 wikitesto]L'intestazione globale è un singolo campo che contiene la stringa ASCII "!<arch>" seguita da un singolo carattere di controllo LF.
Intestazione di File
[modifica | modifica wikitesto]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
[modifica | modifica wikitesto]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 wikitesto]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 wikitesto]Altri progetti
[modifica | modifica wikitesto]- Wikimedia Commons contiene immagini o altri file su ar
Collegamenti esterni
[modifica | modifica wikitesto]- Manual page for GNU binutils ar, su unixhelp.ed.ac.uk. URL consultato il 22 aprile 2006 (archiviato dall'url originale il 3 febbraio 2006).
- Manual page for Unix Seventh Edition's ar, su freebsd.org.