Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ tar(5) — bsd — Apollo Domain/OS SR10.4.1

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

tar(1)

TAR(5)                               BSD                                TAR(5)



NAME
     tar - tape archive file format

DESCRIPTION
     tar, (the tape archive command) dumps several files into one, in a medium
     suitable for transportation.

     A "tar tape" or file is a series of blocks.  Each block is of size
     TBLOCK.  A file on the tape is represented by a header block which
     describes the file, followed by zero or more blocks which give the
     contents of the file.  At the end of the tape are two blocks filled with
     binary zeros, as an end-of-file indicator.

     The blocks are grouped for physical I/O operations.  Each group of n
     blocks (where n is set by the b keyletter on the tar(1) command line -
     default is 20 blocks) is written with a single system call; on nine-track
     tapes, the result of this write is a single tape record.  The last group
     is always written at the full size, so blocks after the two zero blocks
     contain random data.  On reading, the specified or default group size is
     used for the first read, but if that read returns less than a full tape
     block, the reduced block size is used for further reads.

     The header block looks like:

          #define TBLOCK 512
          #define NAMSIZ 100

          union hblock {
               char dummy[TBLOCK];
               struct header {
                    char name[NAMSIZ];
                    char mode[8];
                    char uid[8];
                    char gid[8];
                    char size[12];
                    char mtime[12];
                    char chksum[8];
                    char linkflag;
                    char linkname[NAMSIZ];
               } dbuf;
          };

     name is a null terminated string.  The other fields are zero-filled octal
     numbers in ASCII.  Each field (of width w) contains w-2 digits, a space,
     and a null, except size and mtime, which do not contain the trailing null
     and chksum which has a null followed by a space.  name is the name of the
     file, as specified on the tar command line.  Files dumped because they
     were in a directory which was named in the command line have the
     directory name as prefix and /filename as suffix.  mode is the file mode,
     with the top bit masked off.  uid and gid are the user and group numbers
     which own the file.  size is the size of the file in bytes.  Links and
     symbolic links are dumped with this field specified as zero.  mtime is
     the modification time of the file at the time it was dumped.  chksum is
     an octal ASCII value which represents the sum of all the bytes in the
     header block.  When calculating the checksum, the chksum field is treated
     as if it were all blanks.  linkflag is NULL if the file is "normal" or a
     special file, ASCII `1' if it is an hard link, and ASCII `2' if it is a
     symbolic link.  The name linked-to, if any, is in linkname, with a
     trailing null.  Unused fields of the header are binary zeros (and are
     included in the checksum).

     The first time a given inode number is dumped, it is dumped as a regular
     file.  The second and subsequent times, it is dumped as a link instead.
     Upon retrieval, if a link entry is retrieved, but not the file it was
     linked to, an error message is printed and the tape must be manually re-
     scanned to retrieve the linked-to file.

     The encoding of the header is designed to be portable across machines.

SEE ALSO
     tar(1)

BUGS
     Names or linknames longer than NAMSIZ produce error reports and cannot be
     dumped.

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