ar Formato de Arquivo (Pequeno)

Propósito

Descreve o formato de archive indexado pequeno, em uso antes da Versão 4.3 do sistema operacional Este formato é reconhecido por comandos apenas para fins de compentabilidade retrótao. Veja ar Formato de Arquivo (Big) para o formato de arquivo de arquivo atual.

Descrição

O comando ar (arquivo) combina vários arquivos em um só. O comando ar cria um arquivo de arquivo. O comando ld (editor de link) procura arquivos de arquivo para resolver a ligação do programa. O arquivo /usr/include/ar.h descreve o formato de arquivo de arquivo. Este formato de arquivo só trata de 32-bit membros do XCOFF. O ar Formato de Arquivo (Big) trata dos membros de 32-bit e 64-bit XCOFF

Cabeçalho De Comprimento Fixo

Cada arquivo começa com um cabeçalho de comprimento fixo que contém deslocamentos para membros especiais de arquivo de arquivo. O cabeçalho de comprimento fixo também contém o número mágico, que identifica o arquivo de arquivo. O cabeçalho de comprimento fixo tem o seguinte formato:

#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 */

};

O formato de arquivo de arquivo indexado usa uma lista de dupla vinculada dentro do arquivo de arquivo para ordenar os membros do arquivo. Por isso, os membros do arquivo podem não ser ordenados sequencialmente dentro do arquivo. Os deslocamentos contidos no cabeçalho de comprimento fixo localizam o primeiro e último membro de arquivo do arquivo. A ordem dos membros é determinada pela lista vinculada.

O cabeçalho de comprimento fixo também contém os deslocamentos para a tabela de membros, a tabela de símbolo global e a lista livre. Tanto a tabela de membros quanto a tabela de símbolos globais existem como membros do arquivo e são mantidas no final do arquivo de arquivo. A lista livre contém membros de arquivo que foram excluídos do arquivo. Ao incluir novos membros de arquivo no arquivo, o espaço de lista livre é usado antes que o tamanho do arquivo de arquivo seja expandido. Um deslocamento zero no cabeçalho de comprimento fixo indica que o membro não está presente no arquivo de arquivo.

Cabeçalho Do Membro De Arquivo

Cada membro de arquivo de arquivo é precedido por um cabeçalho do membro do arquivo, que contém as seguintes informações sobre o membro do arquivo:

#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 */
};

O cabeçalho do membro fornece suporte para nomes de membros de até 255 caracteres de comprimento. Os comandosar_namlencampo contém o comprimento do nome do membro. A cadeia de caracteres contendo o nome do membro começa no_ar_name. Os comandosAIAFMAGstring é apenas cosmético.

Cada cabeçalho do membro de arquivo começa em um limite de até mesmo bytes. O comprimento total de um cabeçalho do membro é:

sizeof (struct ar_hdr) + ar_namlen 

Os dados reais para um membro de arquivo começam no primeiro limite de até-byte além do cabeçalho do membro e continua para o número de bytes especificados peloar_size. O comando ar insere bytes nulos para preenchimento quando necessário.

Todas as informações no cabeçalho de comprimento fixo e membros de arquivo estão em formato ASCII imprimível. Informações numéricas, com exceção doar_modecampo, é armazenado como números decimais; oar_modecampo é armazenado em formato octal. Assim, se o arquivo de arquivo contém apenas arquivos imprimíveis, você poderá imprimir o arquivo.

Tabela de Membros

Uma tabela de membros está sempre presente em um arquivo de arquivo indexado. Esta tabela localiza rapidamente os membros do arquivo. Os comandosfl_memoffcampo no cabeçalho de comprimento fixo contém o deslocamento para a tabela de membros. O membro da tabela membro tem um nome de comprimento zero. O comando ar cria automaticamente e atualiza (mas não lista) a tabela de membros. Uma tabela de membros contém as seguintes informações:

  • O número de membros. Este membro tem 12 bytes de comprimento e armazenado em formato ASCII como um número decimal.
  • A matriz de offsets no arquivo de arquivo. O comprimento é de 12 vezes o número de membros. Cada deslocamento tem 12 bytes de comprimento e armazenado em formato ASCII como um número decimal.
  • A tabela string de nome. O tamanho é:
    ar_size - (12 * (the number of members +1)); 

    ou seja, o tamanho é igual ao comprimento total de todos os membros menos o comprimento dos deslocamentos, menos o comprimento do número de membros.

    A tabela string contém o mesmo número de strings como deslocamentos. Todas as strings são nulas-finalizadas. Cada deslocamento da matriz corresponde sequencialmente a um nome na tabela string.

Tabela De Símbolos Globais

Se um arquivo de arquivo contém membros do arquivo objeto XCOFF que não são despoetados, o arquivo de arquivo conterá um membro global de tabela símbolo. Esta tabela de símbolos globais localiza membros de arquivo que definem símbolos globais. O comando tira exclui a tabela de símbolos globais do arquivo. Os comandosfl_gstoffcampo no cabeçalho de comprimento fixo contém o deslocamento para a tabela de símbolos globais. O membro da tabela de símbolo global tem um nome de comprimento zero. O comando ar cria automaticamente e atualiza, mas não lista a tabela de símbolos globais. Uma tabela de símbolos globais contém as seguintes informações:

  • O número de símbolos. Este tem 4 bytes minutos de duração e pode ser acessado com os comandos sgetl e sputl .
  • A matriz de offsets no arquivo de arquivo. O comprimento é quatro vezes o número de símbolos. Cada deslocamento tem 4 bytes de comprimento e pode ser acessado com os comandos sgetl e sputl .
  • A tabela de sequência de nomes. O tamanho é:
    ar_size - (4 * (the number of symbols + 1));

    Ou seja, o tamanho é igual ao comprimento total dos membros, menos o comprimento dos deslocamentos, menos o comprimento do número de símbolos.

    A tabela string contém o mesmo número de strings como deslocamentos. Todas as strings são nulas-finalizadas. Cada deslocamento da matriz corresponde sequencialmente a um nome na tabela string.