我需要使用哪些头变量来提取 tar 文件

问题描述

我打算做一个提取 .tar 存档的 C 程序。我目前正在从我的 Windows 终端使用 Debian,并使用 Visual Studio Code 的 Windows 版本编写代码

据我所知,tar 文件包含一个 header 块(512 字节)和包含特定文件的所有 content 的块(也是 512 字节)。

Wikipedia 中,我发现 header 包含大量变量,这些变量包含特定文件名称、其模式、归档 tar 文件用户名称等.

根据维基百科教给我的内容,我使用了两种结构:一种用于特定文件标题,另一种用于其内容 (...)

typedef struct tarHeaderBody {
    char fname[100];
    char file_mode[8];
    char owner_numeric_userid[8];
    char group_numeric_userid[8];
    char file_size[12];
    char last_modification_time[12];
    char checksum[8];
    char link_indicator;
    char linkedfname[100];
    char severalFields[156];
    char typeFlag;
    char sameField[100];
    char ustarIndicator[6];
    char ustartVer[2];
    char ownerUserName[32];
    char ownerGroupName[32];
    char deviceMajorNo[8];
    char deviceMinorNo[8];
    char fnameprefix[155];
} tarHeader;

typedef struct tarContentBody {
    char content[512];
} tarContent;

(...) 在主函数中声明为:

tarHeader t;
tarContent tContent;

我使用 fopen()fread() 使用第一个结构来读取标题内容

FILE *f = fopen("output.tar","rb")
fread(&t,sizeof(t),1,f);

文件被正确读取。我也试图从结构中输出每个变量,从 t.severalFields 开始,变量输出“奇怪”。此外,存档文本文件内容在这些头变量中的某处输出

我很确定问题出在头变量的组织上,尤其是 t.severalFields 变量,因为我应该声明更多包含那里信息的变量。问题是,我找不到任何可以帮助我这样做的网站或信息来源。我不知道 `t.severalFields' 包含哪些变量或信息。

此外,将变量命名为 severalFields 是因为在上面提到的维基百科链接的第三个表的第一行中,有以下文字

0 156(几个字段,与旧格式相同)

表示它是一个大小为 156 字节的变量。

所以,我的最后一个问题是:我的 tarHeaderBody 结构应该包含哪些变量?如果我想提取文件,我需要所有这些吗?或者文件名称及其内容(不在标题中)是否足够?非常感谢。

另外,如果您需要更多代码片段,我可以提供给您。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)