Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ ar(4) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

ar(1)

ld(1)

strip(1)

sputl(3X)

a.out(4)

ar(4)                                                                 ar(4)

NAME
     ar - Format der Archivdatei

SYNTAX
     #include <ar.h>

BESCHREIBUNG
     Das Archivkommando ar wird zum Zusammenfassen mehrerer Dateien in eine
     Datei verwendet. Archive werden hauptsächlich als Bibliotheken verwen-
     det, die vom Binder ld(1) durchsucht werden.

     Jedes Archiv beginnt mit der magischen Archivzeichenkette.

      #define ARMAG "!<arch>\n"  /* magische Zeichenkette */
      #define SARMAG 8           /* Länge der magischen Zeichenkette */

     Nach der magischen Archivzeichenkette folgen die Archivdateielemente.
     Vor jedem Dateielement steht ein Dateielement-Kopf in folgendem For-
     mat:

      #define ARFMAG "\n"     /* Abschlußzeichenkette des Kopfes */

      struct  arhdr          /* Dateikopf */
      {
      char    arname[16];    /* '/' abgeschlossener Dateiname */
      char    ardate[12];    /* Datum der Datei */
      char    aruid[6];      /* Dateibenutzernummer */
      char    argid[6];      /* Dateigruppennumer */
      char    armode[8];     /* Dateimodus (oktal) */
      char    arsize[10];    /* Dateigröße */
      char    arfmag[2];     /* Abschlußzeichenkette des Kopfes */
      };

     Alle Daten in den Dateiköpfen sind abdruckbarer ASCII-Code. Die nume-
     rischen Informationen in den Köpfen werden als Dezimalzahlen gespei-
     chert (mit Ausnahme von armode, der in Oktaldarstellung angegeben
     wird). Wenn das Archiv abdruckbare Dateien enthält, ist es selbst auch
     abdruckbar.

     Wenn der Dateiname paßt, enthält das Feld arname den Namen direkt,
     wird durch einen Schrägstrich (/) beendet und rechts mit Leerstellen
     aufgefüllt. Wenn der Name nicht paßt, enthält arname einen Schräg-
     strich (/), gefolgt von der dezimalen Darstellung des Relativzeigers
     des Namens in der unten beschriebenen Zeichenkettentabelle des Archi-
     ves.

     Das Feld ardate ist das Änderungsdatum der Datei zum Zeitpunkt der
     Eintragung in das Archiv. Archive in diesem Format können von einem
     System zum anderen übertragen werden, solange das portierbare Archiv-
     kommando ar verwendet wird.





Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

ar(4)                                                                 ar(4)

     Jedes Archivdateielement beginnt an einer geraden Byte-Grenze; falls
     nötig, wird ein Neue-Zeile-Zeichen (new line) zwischen den Dateien
     eingefügt. Die angegebene Größe gibt die tatsächliche Größe der Datei
     ohne Füllzeichen an.

     Es ist zu beachten, daß in einer Archivdatei keine Möglichkeit für
     leere Bereiche gegeben ist.

     Jedes Archiv, das Objektdateien enthält [siehe a.out(4)], enthält eine
     Archivsymboltabelle. Diese Symboltabelle wird vom Binder ld verwendet,
     um zu bestimmen, welche Teile des Archivs während des Bindens geladen
     werden müssen. Die Archivsymboltabelle, sofern vorhanden, ist immer
     die erste Datei im Archiv (wird aber nie aufgelistet) und wird automa-
     tisch von ar erzeugt und/oder aktualisiert.

     Die Archivsymboltabelle hat einen Namen der Länge 0 (d. h. arname[0]
     ist '/'), arname[1]==' ', usw.). Alle "Wörter" in dieser Symbolta-
     belle haben vier Bytes und verwenden die unten gezeigte, rechnerunab-
     hängige Codierung. Alle Rechner verwenden die hier beschriebene Codie-
     rung für die Symboltabelle, selbst wenn die "natürliche" Bytefolge
     anders ist.

                      ________________________________________________
                      |0         |1          |2          |3          |
                      |          |           |           |           |
        0x01020304    |     01   |     02    |     03    |     04    |
                      |          |           |           |           |
                      |__________|___________|___________|___________|

     Der Inhalt dieser Datei ist folgendermaßen:

     1. die Anzahl der Symbole; Länge: 4 Bytes

     2. das Feld der Relativzeiger in die Archivdatei; Länge: 4 Bytes *
        "Anzahl der Symbole"

     3. die Namenstabelle; Länge: arsize - 4 Bytes * ("Anzahl der Symbole"
        + 1)

     Als Beispiel definiert die folgende Symboltabelle vier Symbole. Das
     Archivmitglied beim Datei-Offset 114 definiert name und object. Das
     Archivmitglied beim Offset 426 definiert function und eine zweite Ver-
     sion von name.











Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

ar(4)                                                                 ar(4)

              Offset      +0       +1      +2      +3
                       _________________________________
                 0     |               4               |  4 Offset-Einträge
                       |_______________________________|
                 4     |             114               |  name
                       |_______________________________|
                 8     |             114               |  object
                       |_______________________________|
                12     |             426               |  function
                       |_______________________________|
                16     |             426               |  name
                       |_______________________________|
                20     |   n   |   a   |   m   |   e   |
                       |_______|_______|_______|_______|
                24     |   \0  |   o   |   b   |   j   |
                       |_______|_______|_______|_______|
                28     |   e   |   c   |   t   |   \0  |
                       |_______|_______|_______|_______|
                32     |   f   |   u   |   n   |   c   |
                       |_______|_______|_______|_______|
                36     |   t   |   i   |   o   |   n   |
                       |_______|_______|_______|_______|
                40     |   \0  |   n   |   a   |   m   |
                       |_______|_______|_______|_______|
                44     |   e   |   \0  |       |       |
                       |_______|_______|_______|_______|

     Die Anzahl der Symbole und das Feld der Relativzeiger werden mit
     sgetl() und sputl() verwaltet. Die Namenstabelle enthält genau soviele
     mit Null-Byte endende Zeichenketten, wie Elemente im Relativzeigerfeld
     vorhanden sind. Jeder Relativzeiger entspricht einem Namen in der
     Namenstabelle (in derselben Reihenfolge). Die Bezeichnungen in der
     Namenstabelle sind alle die definierten globalen Symbole, die in den
     Objektdateien im Archiv zu finden sind. Jeder Relativzeiger ist die
     Adresse des Archivkopfes für das zugehörige Symbol.

     Wenn der Name eines Archivmitglieds länger als 15 Bytes ist, enthält
     ein besonderes Archivmitglied eine Tabelle von Dateinamen, denen
     jeweils ein Schrägstrich und eine Neue-Zeile-Zeichen folgt. Das Mit-
     glied der Namenstabelle (Zeichenkettentabelle), sofern vorhanden,
     steht vor allen "normalen" Archivmitgliedern. Die besondere Archivsym-
     boltabelle ist kein "normales" Mitglied und muß ganz vorne stehen,
     wenn sie existiert. Der Eintrag arname des Kopfes der Zeichenketten-
     tabelle enthält einen Namen der Länge Null arname[0]=='/', gefolgt
     von einem abschließenden Schrägstrich (arname[1]=='/'), gefolgt von
     Leerzeichen (arname[2]==' ', usw.). Offsets in die Zeichenkettenta-
     belle beginnen bei Null. Beispiele für arname-Werte für kurze und
     lange Dateinamen finden sie unten.






Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

ar(4)                                                                 ar(4)

       Offset    +0    +1    +2     +3    +4    +5    +6    +7    +8    +9
              ______________________________________________________________
           0  |  f  |  i   |  l  |  e  |  _  |  n  |  a  |  m  |  e  |  _  |
              |_____|______|_____|_____|_____|_____|_____|_____|_____|_____|
          10  |  s  |  a   |  m  |  p  |  l  |  e  |  /  |  \n |  l  |  o  |
              |_____|______|_____|_____|_____|_____|_____|_____|_____|_____|
          20  |  n  |  g   |  e  |  r  |  f  |  i  |  l  |  e  |  n  |  a  |
              |_____|______|_____|_____|_____|_____|_____|_____|_____|_____|
          30  |  m  |  e   |  x  |  a  |  m  |  p  |  l  |  e  |  /  |  \n |
              |_____|______|_____|_____|_____|_____|_____|_____|_____|_____|

     ______________________________________________________________________
    | Name                 |  ar_name    |  Bemerkung                     |
    |______________________|_____________|________________________________|
    | short-name           |  short-name |  Nicht in der Zeichenkettenta- |
    |                      |             |  belle                         |
    |______________________|_____________|________________________________|
    | filenamesample     |  /0         |  Offset 0 in der Zeichenketten-|
    |                      |             |  tabelle                       |
    |______________________|_____________|________________________________|
    | longerfilenamexample |  /18        |  Offset 18 in der Zeichenket-  |
    |                      |             |  tentabelle                    |
    |______________________|_____________|________________________________|

HINWEISE
     strip() entfernt alle Symboltabellen-Einträge des Archivs. Die
     Symboltabellen-Einträge müssen dann wieder über die Option -ts des
     Kommandos ar hergestellt werden, bevor das Archiv von dem Binder ld
     verwendet werden kann.

SIEHE AUCH
     ar(1), ld(1), strip(1), sputl(3X), a.out(4).






















Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026