ar 文件格式 (大)

用途

将多个文件合并为一个文件。 这是适用于该操作系统的缺省 阿尔 库归档格式。

描述

阿尔 (归档) 文件格式将多个文件合并为一个文件。 阿尔 命令用于创建归档文件。 尔德 (链接编辑器) 命令搜索归档文件以解析程序链接。 /usr/include/ar.h 文件描述了归档文件格式。 此文件格式将 32 位和 64 位对象文件同时容纳在同一个归档中。

此为 阿尔 命令使用的缺省文件格式。

固定长度头

每个归档都以固定长度的头开头,该头包含对特殊归档文件成员的偏移量。 固定长度的头还包含幻数,它标识归档文件。 固定长度的头具有以下格式:

#define __AR_BIG__
#define AIAMAGBIG "<bigaf>\n"       /* Magic string */
#define SAIAMAG 8                /*Length of magic string */
struct  fl_hdr                   /*Fixed-length header */

{
char  fl_magic[SAIAMAG];  /* Archive magic string */
char  fl_memoff[20];      /*Offset to member table */
char  fl_gstoff[20];      /*Offset to global symbol table */
char  fl_gst64off[20];    /*Offset global symbol table for 64-bit objects */
char  fl_fstmoff[20];     /*Offset to first archive member */
char  fl_lstmoff[20];     /*Offset to last archive member */
char  fl_freeoff[20];     /*Offset to first mem on free list */

} ;

已建立索引的归档文件格式使用归档文件中的双链接列表来对文件成员进行排序。 因此,归档中的文件成员可能不会按顺序排序。 固定长度头中包含的偏移量将找到归档的第一个文件成员和最后一个文件成员。 成员顺序由链接的列表确定。

固定长度头还包含到成员表,全局符号表和空闲列表的偏移量。 成员表和全局符号表都作为归档的成员存在,并且保留在归档文件的末尾。 该空闲列表包含已从归档中删除的文件成员。 将新文件成员添加到归档时,将在扩展归档文件大小之前使用可用列表空间。 固定长度头中的零偏移指示该成员在归档文件中不存在。

文件成员头

每个归档文件成员前面都有一个文件成员头,其中包含有关该文件成员的以下信息:

#define  AIAFMAG  "`\n"          /* Header trailer string*/
struct   ar_hdr                  /* File member header*/
{
           char ar_size[20];     /* File member size - decimal */
           char ar_nxtmem[20];   /* Next member offset-decimal */
           char ar_prvmem[20];   /* Previous member offset-dec */
           char ar_date[12];     /* File member date-decimal */
           char ar_uid[12];      /* File member userid-decimal */
           char ar_gid[12];      /* File member group id-decimal */
           char ar_mode[12];     /* File member mode-octal */
           char ar_namlen[4];    /* File member name length-dec */
           union
                   {
                   char ar_name[2];  /* Start of member name */
                   char ar_fmag[2];  /* AIAFMAG - string to end */
                   };
           _ar_name;                /* Header and member name */
};

成员头提供最多 255 个字符长的成员名支持。 该ar_namlen字段包含成员名的长度。 包含成员名的字符串从以下位置开始:_ar_name。 该AIAFMAG字符串仅为化妆品。

每个归档成员头从一个偶数字节边界开始。 成员头的总长度如下所示:
sizeof (struct ar_hdr) + ar_namlen 

文件成员的实际数据从成员头之外的第一个偶数字节边界开始,并以该文件成员指定的字节数继续。ar_size阿尔 命令在必要时插入空字节以进行填充。

固定长度头和归档成员中的所有信息都采用可打印 ASCII 格式。 数字信息,但以下项除外:ar_mode字段,存储为十进制数字;ar_mode字段以八进制格式存储。 因此,如果归档文件仅包含可打印文件,那么可以打印该归档。

成员表

已建立索引的归档文件中始终存在成员表。 此表快速查找归档的成员。 该fl_memoff固定长度头中的字段包含到成员表的偏移量。 成员表成员具有长度为零的名称。 阿尔 命令会自动创建和更新 (但不列出) 成员表。 成员表中包含以下信息:

  • 成员的数量。 此成员长度为 20 个字节,并且以 ASCII 格式存储为十进制数。
  • 归档文件中的偏移量数组。 该长度是成员数的 20 倍。 每个偏移量长度为 20 个字节,并以 ASCII 格式存储为十进制数。
  • 名称字符串表。 大小为:
    ar_size - (20 * (the number of members +1)); 

    即,该大小等于所有成员的总长度减去偏移量的长度,再减去成员数的长度。

    字符串表包含的字符串数与偏移量相同。 所有字符串都以 null 结束。 数组中的每个偏移量按顺序对应于字符串表中的名称。

全局符号表

紧跟在成员表之后,归档文件包含两个全局符号表。 第一个全局符号表查找定义了全局符号的 32 位文件成员; 第二个全局符号表对 64 位文件成员执行相同的操作。 如果该归档没有 32 位或 64 位文件成员,那么将省略各自的全局符号表。 可使用 命令从归档中删除一个或两个全局符号表。 该fl_gstoff固定长度头中的字段包含与 32 位全局符号表的偏移量,并且fl_gst64off包含 64 位全局符号表的偏移量。 全局符号表成员具有长度为零的名称。 阿尔 命令将自动创建和更新,但不会列出全局符号表。 全局符号表中包含以下信息:

  • 符号的数量。 长度为 8 个字节,可以使用 斯格尔斯普特尔 命令进行访问。
  • 归档文件中的偏移量数组。 长度是符号数的八倍。 每个偏移量长度为 8 个字节,可以使用 斯格尔斯普特尔 命令进行访问。
  • 名称/字符串表。 大小为:
    ar_size - (8  *  (the number of symbols + 1));
    即,大小等于成员的总长度,减去偏移量的长度,再减去符号数的长度。

    字符串表包含的字符串数与偏移量相同。 所有字符串都以 null 结束。 数组中的每个偏移量按顺序对应于字符串表中的名称。