Ar (Unix)
# Ar (Unix)

El archivador (también conocido simplemente como ar) es una utilidad de Unix que mantiene grupos de ficheros como un único fichero archivo. Generalmente, se usa ar para crear y actualizar ficheros biblioteca que utiliza el editor de enlaces o enlazador; sin embargo, se puede usar para crear archivos con cualquier otro propósito. ar se incluye como una de las GNU Binutils.

## Creación de un archivo

Por ejemplo, para crear un archivo a partir de los ficheros class1.o, class2.o, class3.o, se usaría la siguiente orden:

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

para compilar un programa que depende de class1.o, class2.o, y class3.o uno podría hacer:

    cc main.c -L. -lclass

en vez de:

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

Las opciones -L y -l le dicen al enlazador que busque la biblioteca «libclass.a» en el directorio actual.

## Detalles del formato de fichero

El formato ar nunca ha sido estandarizado, los archivos modernos están basados en un formato común con dos variantes conocidas, BSD y GNU.

Históricamente ha habido otras variantes incluyendo AIX (pequeña), AIX (grande) y Coherent, que variaban significativamente del formato común.

Los archivos deb usan el formato común.

Un fichero ar empieza con una cabecera global, seguida de una cabecera y sección de datos por cada fichero almacenado dentro del fichero ar.

La sección de datos está alineada a 2 bytes, si fuera a terminar en un punto impar se usa un «\n» como relleno.

### Cabecera global

La cabecera global es un único campo que contiene la cadena ASCII mágica «!<arch>» seguida de un único carácter de control LF

### Cabecera de fichero

El formato común es el siguiente.

| Desde posición | Hasta posición | Nombre del campo | Formato del campo |
| - | - | - | - |
| 0 | 15 | Nombre del fichero | ASCII |
| 16 | 27 | Fecha del fichero | Decimal |
| 28 | 33 | ID del propietario | Decimal |
| 34 | 39 | ID del grupo | Decimal |
| 40 | 47 | Modo del fichero | Octal |
| 48 | 57 | Tamaño del fichero en bytes | Decimal |
| 58 | 59 | Cabecera mágica | '\n |

Debido a las limitaciones del formato y longitud del nombre del fichero, tanto las versiones GNU como BSD han desarrollado diferentes métodos de conseguir nombres de fichero extendidos.

**Variante BSD**

BSD ar almacena los nombres de fichero extendidos colocando la cadena «#1/» seguida de la longitud del nombre del fichero en el campo del nombre del fichero, y agregando el nombre real del fichero a la cabecera del fichero.

**Variante GNU**

GNU ar almacena varios nombres de fichero extendidos en la sección de datos de un fichero con el nombre «//», este registro es referenciado por futuras cabeceras. Una cabecera referencia un nombre de fichero extendido almacenando una «/» seguida de una posición decimal al principio del nombre del fichero en la sección de datos del nombre del fichero extendido.

GNU ar utiliza una '/' para marcar el final del nombre del fichero, esto permite usar espacios sin usar un nombre de fichero extendido.

GNU ar utiliza el nombre de fichero especial «/ » para marcar que la siguiente entrada de datos contiene tabla de búsqueda de símbolos, que se usa en las bibliotecas ar para acelerar el acceso

