gpt4 book ai didi

c - 在 c 中实现 tar 命令

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:03 27 4
gpt4 key购买 nike

我正在尝试使用 C 创建 linux“tar”命令的基本版本,我使用 perror 查看执行期间是否有任何错误,我得到了这个

./tar
Error2: Bad file descriptor

这就是我到目前为止所做的

#include <stdio.h>
#include <libtar.h>
#include <fcntl.h>

int main(void)
{
TAR *pTar;
char *prefix = ".";
char *filename = "file.tar";

if ((tar_open(&pTar, filename, NULL, O_WRONLY, 0644, TAR_GNU)) == -1)
perror("Error1");
else if ((tar_extract_all(pTar, prefix)) == -1)
perror("Error2");
else if ((tar_close(pTar)) == -1)
perror("Error3");
}

提前致谢:)

最佳答案

您正在以 O_WRONLY 模式打开您的 tar 文件,因此它会截断现有文件而不是打开它进行阅读。

当您尝试从文件中提取时出现错误(可能是在读取文件头时),这是预料之中的,因为文件内容已被之前的(成功)调用破坏。

在此处检查工作示例:

总而言之,我的解决方法是:替换

if ((tar_open(&pTar, filename, NULL, O_WRONLY, 0644, TAR_GNU)) == -1)

通过

if ((tar_open(&pTar, filename, NULL, O_RDONLY, 0644, TAR_GNU)) == -1)

(我不认为所有参数在读取模式下都有用,例如权限或 tar 类型,但这应该有效,很难找到该库的合适示例)

关于c - 在 c 中实现 tar 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42587991/

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