ar 文件格式 (小型)

用途

描述操作系统版本 4.3 之前使用的小索引归档文件格式。 此格式由命令识别,仅用于向后兼容性目的。 请参阅 ar 文件格式 (大) 以了解当前归档文件格式。

描述

阿尔 (归档) 命令将多个文件组合成一个文件。 阿尔 命令用于创建归档文件。 尔德 (链接编辑器) 命令搜索归档文件以解析程序链接。 /usr/include/ar.h 文件描述了归档文件格式。 此归档格式仅处理 32 位 XCOFF 成员。 ar 文件格式 (大) 可同时处理 32 位和 64 位 XCOFF 成员

固定长度头

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

#define AIAMAG "<aiaff>\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[12];      /* Offset to member table */
char fl_gstoff[12];      /* Offset to global symbol table */
char fl_fstmoff[12];     /* Offset to first archive member */
char fl_lstmoff[12];     /* Offset to last archive member */
char fl_freeoff[12];     /* Offset to first mem on free list */

};

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

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

文件成员头

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

#define AIAFMAG "`\n"           /* Header trailer string */
struct ar_hdr                   /* File member header */
{
        char ar_size[12];       /* File member size - decimal */
        char ar_nxtmem[12];     /* Next member offset - decimal*/
        char ar_prvmem[12];     /* Previous member offset - dec */
        char ar_date[12];       /* File member date - decimal */
        char ar_uid[12];        /* File member user id - 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固定长度头中的字段包含到成员表的偏移量。 成员表成员具有长度为零的名称。 阿尔 命令会自动创建和更新 (但不列出) 成员表。 成员表中包含以下信息:

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

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

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

全局符号表

如果归档文件包含未被剥离的 XCOFF 对象文件成员,那么该归档文件将包含全局符号表成员。 此全局符号表查找定义全局符号的文件成员。 命令将从归档中删除全局符号表。 该fl_gstoff固定长度头中的字段包含全局符号表的偏移量。 全局符号表成员具有长度为零的名称。 阿尔 命令会自动创建和更新,但不会列出全局符号表。 全局符号表中包含以下信息:

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

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

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