问题描述
我打算做一个提取 .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 (将#修改为@)