Программа обработки архивов tar


Программа обработки архивов tar - стр. 113


файл, за которым может следовать какое-то число записей, дающих
содержание файла. В конце архивного файла может быть запись, состоящая
из двоичных нулей, и маркер конца файла. Разумная система должна
записывать нули в конец, но такая запись не предполагается при чтении
архива.
Записи могут быть разбиты на блоки для физических операций I/O.
Каждый блок из n записей (где n задана с помощью опции
'--block-size=512-размер') записывается посредством операции 'write
()'. На магнитных лентах результат этого - отдельная запись на ленте.
При записывании архива последний блок записей должен быть записан в
полном размере, и его запись должна состоять из одних нулей. При
чтении архива разумная система должна иметь дело с архивами, последний
блок которых короче остальных или который содержит ненужную информацию
после нулей.
Заголовок определен в C (см. ниже). В GNU tar это часть файла
'src/tar.h':
/* Standard Archive Format - Standard TAR - USTAR. */
/* Header block on tape.
Здесь мы используем традиционные названия DP. "block" - большая
часть материала I/O. "record" - кусок информации, с которой мы имеем
дело. Обычно много "record" помещается в "block". */
#define RECORDSIZE 512
- 177 -
#define NAMSIZ 100
#define TUNMLEN 32
#define TGNMLEN 32
#define SPARSE_EXT_HDR 21
#define SPARSE_IN_HDR 4
struct sparse
{
char offset[12];
char numbytes[12];
};
union record
{
char charptr[RECORDSIZE]
struct header
{
char arch_name[NAMSIZ];
char mode[8];
char uid[8];
char gid[8];
char size[12];
char mtime[12];
char chksum[8];
char linkflag;
char arch_linkname[NAMSIZ];
char magic[8];
char uname[TUNMLEN];
char gname[TGNMLEN];
char devmajor[8];
char devminor[8];
/* Следующие поля были добавлены в GNU и не являются стандартными. */
char atime[12];
char ctime[12];
char offset[12];
- 178 -
char longnames[4];
/* Некоторые компиляторы сами вставляют содержимое. Но проще всегда
его вставлять! */
char pad;



- Начало -  - Назад -  - Вперед -



Книжный магазин