我正在尝试使用C创建linux“tar”命令的基本版本,我使用perror查看执行期间是否有任何错误,我得到了这个
`:=`(Revenue = i.Revenue/.N, Quantity = i.Quantity/.N)
这就是我到目前为止所做的事情
./tar
Error2: Bad file descriptor
提前致谢:)
答案 0 :(得分:4)
您正在以tar
模式打开O_WRONLY
文件,因此会截断现有文件,而不是将其打开以供阅读。
当您尝试从文件中提取时,您会收到错误(可能在读取标题时),这是预期的,因为文件内容被先前(成功)调用破坏了。
点击此处查看工作示例:
O_RDONLY
总结一下,我的修复:替换
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文件。
至少这是造成我神秘的“无效论证”的原因。 我通过在解压缩之前重命名原始文件来修复它。