1. ホーム
  2. c

[解決済み] tarballのPaxHeaders

2022-02-17 16:49:26

質問

をしています。 tar C言語のように、問題が発生しました。 ファイルとディレクトリのアーカイブとアンアーカイブをしたいだけなので、このコマンドを操作しています。 tar -cvf NAME.tar FILE1 [FILE2...]

今度はヘッダーを POSIX このアーカイブの

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 */
};
int main()
{
    struct posix_header header;
    int fd;

    if ((fd = open("./obj.tar", O_RDONLY)) < 2)     //open tarball
        return (1);
    read(fd, &header, 500);                         //fill struct
    printf("%s\n", header.name);
    close(fd);
}

が、出力は常に ./PaxHeaders.NUMBER/FILE_NAME . アーカイブをエディタで開こうとすると、各ファイルの前にPaxHeaderが表示されます。

とは何ですか? PaxHeaders ? Paxと完全互換にするために追加されたヘッダーはありますか?もしあるのなら、削除することは可能ですか?

ちょっと迷っているのですが、このヘッダーの後に解析したり、ジャンプしたりしなければならないのでしょうか?

どのように解決するのですか?

POSIX.1 2008 では、ustar フォーマットの拡張として パックス 形式を使用します。このフォーマットの新機能は typeflag に設定します。 x に対して 拡張PAXヘッダー (次のファイルに影響します)または g には グローバルパックスヘッダー (以降のすべてのファイルに影響します)。これらのヘッダは、アーカイブプログラムが tar ファイルにアクセス時間や拡張長 (通常の tar では大きすぎるファイルを保存するため) などの追加属性を保存することを可能にします。

この回答では、スペースが限られているため、仕様の全容を説明することはできません。 POSIX をご覧ください。