在c中实现tar命令

时间:2017-03-03 20:34:25

标签: c linux tar

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

`:=`(Revenue = i.Revenue/.N, Quantity = i.Quantity/.N)

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

./tar
Error2: Bad file descriptor

提前致谢:)

2 个答案:

答案 0 :(得分:4)

您正在以tar模式打开O_WRONLY文件,因此会截断现有文件,而不是将其打开以供阅读。

当您尝试从文件中提取时,您会收到错误(可能在读取标题时),这是预期的,因为文件内容被先前(成功)调用破坏了。

点击此处查看工作示例:

总结一下,我的修复:替换

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类型,但这应该有用,很难找到该库的正确示例)

答案 1 :(得分:0)

对于将来引用此内容的任何人,

创建tar时 - 说abc.tar 如果你附加了abc.tar(它也在append_tree中附加了所有文件,包括那个),你的abc.tar文件,在tar_extract_all上,这个.tar文件(同名)也被提取覆盖原始的tar文件。

至少这是造成我神秘的“无效论证”的原因。 我通过在解压缩之前重命名原始文件来修复它。