Ar (Unix)
Da Wikipedia, l'enciclopedia libera.
L' archiver (Semplicemente noto anche come ar) è un tool Unix che mantiene gruppi di file com un unico file di archivio. Oggi, ar è solitamente utilizzato per creare ed aggiornare solamente file di Libreria_software 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 uno delle GNU Binutils.
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.
Indice |
[modifica] 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 riempe con un "\n".
[modifica] Intestazione globale
L'intestazione globale è un singolo campo che contiene la stringa ASCII magica "!<arch>" seguita da un singola LF carattere di controllo
[modifica] 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 limitazione sulla lunghezza e il formato dei file, sia la varianti GNU e BSD utilizzano metodi differenti per raggiungere nomi di file estesi.
[modifica] 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.
[modifica] 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 usaun '/' 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
[modifica] Voci correlate
- .deb
- archive formats
- List of Unix programs