压缩包中的 PaxHeaders

PaxHeaders in tarball

我正在做一个类似于 C 的 tar,但我遇到了问题。 我只想归档和取消归档文件和目录,所以我运行这个命令:tar -cvf NAME.tar FILE1 [FILE2...]

现在我正在尝试获取此存档的 header 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?有没有加个header完全兼容Pax?如果有,是否可以删除它们?

我有点迷路了,我是必须解析它们还是在这些 header 之后跳转?

POSIX.1 2008 定义了 ustar 格式的扩展,称为 pax 格式。它的新功能是使用特殊文件引入的 typeflag 设置为 x 用于 扩展 pax header(影响下一个文件)或 g 对于 global pax header(影响所有进一步的文件)。这些 header 允许归档程序在 tar 文件中存储其他属性,例如访问时间或扩展长度(以存储对于传统 tar 来说太大的文件)。

此答案中的

Space 限制太多,无法复制完整规范,请阅读 POSIX 了解更多详情。