web-dev-qa-db-ja.com

tarballのPaxHeaders

Cのようにtarを実行していますが、問題が発生しています。ファイルとディレクトリをアーカイブおよびアーカイブ解除したいので、次のコマンドを操作します: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と完全に互換性があるようにヘッダーが追加されていますか?ある場合、それらを削除することは可能ですか?

私は少し迷っています、私はそれらを解析するか、これらのヘッダーの後にジャンプする必要がありますか?

どうもありがとう !

9
Liroo Pierre

POSIX.1 2008は、pax形式と呼ばれるustar形式の拡張を定義しています。新しい機能は、拡張paxヘッダーに対してtypeflagxに設定された特別なファイルを使用して導入されます(次のfile)またはグローバルpaxヘッダーの場合はg(以降のすべてのファイルに影響します)。これらのヘッダーを使用すると、アーカイブプログラムは、アクセス時間や拡張長などの追加の属性をtarファイルに保存できます(従来のtarには大きすぎるファイルを保存するには)。

この回答のスペースは制限が多すぎて完全な仕様を複製できません。詳細については、 [〜#〜] posix [〜#〜] を参照してください。

15
fuz