Проверьте магические байты при смещении 257. Если они соответствуют «ustar», включая нулевой ограничитель, файл, вероятно, является tar.
См: http://www.gnu.org/software/tar/manual/html_node/Standard.html
/* tar Header Block, from POSIX 1003.1-1990. */
/* POSIX header. */
struct posix_header
{ /* byte offset */
char name[100]; /* 0 */
char mode[8]; /* 100 */
char uid[8]; /* 108 */
char gid[8]; /* 116 */
char size[12]; /* 124 */
char mtime[12]; /* 136 */
char chksum[8]; /* 148 */
char typeflag; /* 156 */
char linkname[100]; /* 157 */
char magic[6]; /* 257 */
char version[2]; /* 263 */
char uname[32]; /* 265 */
char gname[32]; /* 297 */
char devmajor[8]; /* 329 */
char devminor[8]; /* 337 */
char prefix[155]; /* 345 */
/* 500 */
};
#define TMAGIC "ustar" /* ustar and a null */
#define TMAGLEN 6
Это не является надежным и, кстати, не может с архивами производства ГНУ дегтя, которые создаются с неправильным магическим числом " ustar "(без байта NUL) и версии" \ 0 ". GNU tar может создавать архивы ustar, но по какой-то причине они решили не делать этого по умолчанию. – fuz
@FUZxxl Да, это странно. Любая идея, почему они это сделают? – Navin
Не знаю. Похоже на то, что у меня есть блокиратор. В manpage говорится: «В следующей версии мы собираемся создавать архивы POSIX по умолчанию» примерно с десятилетия. Нет никакой веской причины того, что делает GNU tar. В конце концов, их собственный формат не более мощный, чем формат POSIX (pax), и последний легко расширяется. – fuz