gpt4 book ai didi

compression - TAR 文件格式问题

转载 作者:行者123 更新时间:2023-12-03 20:37:20 26 4
gpt4 key购买 nike

我不清楚,什么是正确的 .tar文件格式,因为我在三个场景中遇到了正确的功能(见下文)。

基于 .tar我一直在使用的规范,magic字段 (ustar) 是空终止字符串和 version字段是八进制数,没有尾随空值。

但是我已经审查了几个 .tar我在我的服务器上找到的文件,我发现了 magic 的不同实现和 version field 并且它们三个似乎都正常工作,可能是因为系统忽略了这些字段。

查看单词之间的不同 (3) 个字节 优星 在以下示例中>>

场景 1 ( 20 20 00 ):

 000000F0      00 00 00 00 | 00 00 00 00 | 00 00 00 00      ............
000000FC 00 00 00 00 | 00 75 73 74 | 61 72 20 20 .....ustar
00000108 00 72 6F 6F | 74 00 00 00 | 00 00 00 00 .root.......
00000114 00 00 00 00 | 00 00 00 00 | 00 00 00 00 ............

场景 2 ( 00 20 20 ):
 000000F0      00 00 00 00 | 00 00 00 00 | 00 00 00 00      ............
000000FC 00 00 00 00 | 00 75 73 74 | 61 72 00 20 .....ustar.
00000108 20 72 6F 6F | 74 00 00 00 | 00 00 00 00 root.......
00000114 00 00 00 00 | 00 00 00 00 | 00 00 00 00 ............

场景 3 ( 00 00 00 ):
 000000F0      00 00 00 00 | 00 00 00 00 | 00 00 00 00      ............
000000FC 00 00 00 00 | 00 75 73 74 | 61 72 00 00 .....ustar..
00000108 00 72 6F 6F | 74 00 00 00 | 00 00 00 00 .root.......
00000114 00 00 00 00 | 00 00 00 00 | 00 00 00 00 ............

哪一种是正确的格式?

最佳答案

在我看来,您的示例都不是正确的,至少对于 POSIX 格式而言不是。
如您所见 here :

/* 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 */
};

#define TMAGIC "ustar" /* ustar and a null */
#define TMAGLEN 6
#define TVERSION "00" /* 00 and no null */
#define TVERSLEN 2

您的第一个示例( Scenario 1 )的格式似乎与旧的 GNU header 格式匹配:
/* OLDGNU_MAGIC uses both magic and version fields, which are contiguous.
Found in an archive, it indicates an old GNU header format, which will be
hopefully become obsolescent. With OLDGNU_MAGIC, uname and gname are
valid, though the header is not truly POSIX conforming */

#define OLDGNU_MAGIC "ustar " /* 7 chars and a null */

在您的第二个和第三个示例( Scenario 2Scenario 3 )中, version字段设置为意外值(根据上述文档,正确的值应该是 00 ASCII 或 0x30 0x30 十六进制),因此该字段很可能被忽略。

关于compression - TAR 文件格式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19298465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com