tar.h File

Purpose

Contains definitions for flags used in the tar archive header.

Description

The /usr/include/tar.h file contains extended definitions used in the typeflag and mode fields of the tar archive header block. The file also provides values for the required POSIX entries.

tar Archive Header Block

Every file archived using the tar command is represented by a header block describing the file, followed by zero or more blocks that give the contents of the file. The end-of-archive indicator consists of two blocks filled with binary zeros. Each block is a fixed size of 512 bytes.

Blocks are grouped for physical I/O operations and groups can be written using a single write subroutine operation. On magnetic tape, the result of this write operation is a single tape record. The last record is always a full 512 bytes. Blocks after the end-of-archive zeros contain undefined data.

The header block structure is shown in the following table. All lengths and offsets are in decimal.

Table 1. Header Block Structure
Field Name Structure
name
Offset:
0
Length in Bytes:
100
Contents:
File name without a / (slash)
mode
Offset:
100
Length in Bytes:
8
Contents:
File mode
uid
Offset:
108
Length in Bytes:
MAXIMPL_LOGIN_NAME_MAX
Contents:
User ID
gid
Offset:
116
Length in Bytes:
MAXIMPL_LOGIN_NAME_MAX
Contents:
Group ID
size
Offset:
124
Length in Bytes:
12
Contents:
Size in bytes
mtime
Offset:
136
Length in Bytes:
12
Contents:
Latest modification time
cksum
Offset:
148
Length in Bytes:
8
Contents:
File and header checksum
typeflag
Offset:
156
Length in Bytes:
1
Contents:
File type
linkname
Offset:
157
Length in Bytes:
100
Contents:
Linked path name or file name
magic
Offset:
257
Length in Bytes:
6
Contents:
Format representation for tar
version
Offset:
263
Length in Bytes:
3
Contents:
Version representation for tar
uname
Offset:
265
Length in Bytes:
32
Contents:
User name
gname
Offset:
297
Length in Bytes:
32
Contents:
Group name
devmajor
Offset:
329
Length in Bytes:
8
Contents:
Major device representation
devminor
Offset:
337
Length in Bytes:
8
Contents:
Minor device representation
prefix
Offset:
345
Length in Bytes:
155
Contents:
Path name without trailing slashes

Names are preserved only if the characters are chosen from the POSIX portable file-name character set or if the same extended character set is used between systems. During a read operation, a file can be created only if the original file can be accessed using the open, stat, chdir, fcntl, or opendir subroutine.

Header Block Fields

Each field within the header block and each character on the archive medium are contiguous. There is no padding between fields. More information about the specific fields and their values follows:

name
The file's path name is created using this field, or by using this field in connection with the prefix field. If the prefix field is included, the name of the file is prefix/name. This field is null-terminated unless every character is non-null.
mode
Provides 9 bits for file permissions and 3 bits for SUID, SGID, and SVTX modes. All values for this field are in octal. During a read operation, the designated mode bits are ignored if the user does not have equal (or higher) permissions or if the modes are not supported. Numeric fields are terminated with a space and a null byte. The tar.h file contains the following possible values for this field:
Flag Octal Description
TSUID 04000 Set user ID on execution.
TSGID 02000 Set group ID on execution.
TSVTX 01000 Reserved.
TUREAD 00400 Read by owner.
TUWRITE 00200 Write by owner.
TUEXEC 00100 Execute or search by owner.
TGREAD 00040 Read by group.
TGWRITE 00020 Write by group.
TGEXEC 00010 Execute or search by group.
TOREAD 00004 Read by others.
TOWRITE 00002 Write by others.
TOEXEC 00001 Execute or search by other.
uid
Extracted from the corresponding archive fields unless a user with appropriate privileges restores the file. In that case, the field value is extracted from the password and group files instead. Numeric fields are terminated with a space and a null byte.
gid
Extracted from the corresponding archive fields unless a user with appropriate privileges restores the file. In that case, the field value is extracted from the password and group files instead. Numeric fields are terminated with a space and a null byte.
size
Value is 0 when the typeflag field is set to LNKTYPE. This field is terminated with a space only.
mtime
Value is obtained from the modification-time field of the stat subroutine. This field is terminated with a space only.
chksum
On calculation, the sum of all bytes in the header structure are treated as spaces. Each unsigned byte is added to an unsigned integer (initialized to 0) with at least 17-bits precision. Numeric fields are terminated with a space and a null byte.
typeflag
The tar.h file contains the following possible values for this field:
Flag Value Description
REGTYPE '0' Regular file.
AREGTYPE '\0' Regular file.
LNKTYPE '1' Link.
SYMTYPE '2' Reserved.
CHRTYPE '3' Character special.
BLKTYPE '4' Block special.
DIRTYPE '5' Directory. In this case, the size field has no meaning.
FIFOTYPE '6' FIFO special. Archiving a FIFO file archives its existence, not contents.
CONTTYPE '7' Reserved.

If other values are used, the file is extracted as a regular file and a warning issued to the standard error output. Numeric fields are terminated with a space and a null byte.

The LNKTYPE flag represents a link to another file, of any type, previously archived. Such linked-to files are identified by each file having the same device and file serial number. The linked-to name is specified in the linkname field, including a trailing null byte.

linkname
Does not use the prefix field to produce a path name. If the path name or linkname value is too long, an error message is returned and any action on that file or directory is canceled. This field is null-terminated unless every character is non-null.
magic
Contains the TMAGIC value, reflecting the extended tar archive format. In this case, the uname and gname fields will contain the ASCII representation for the file owner and the file group. If a file is restored by a user with the appropriate privileges, the uid and gid fields are extracted from the password and group files (instead of the corresponding archive fields). This field is null-terminated.
version
Represents the version of the tar command used to archive the file. This field is terminated with a space only.
uname
Contains the ASCII representation of the file owner. This field is null-terminated.
gname
Contains the ASCII representation of the file group. This field is null-terminated.
devmajor
Contains the device major number. Terminated with a space and a null byte.
devminor
Contains the device minor number. Terminated with a space and a null byte.
prefix
If this field is non-null, the file's path name is created using the prefix/name values together. Null-terminated unless every character is non-null.