用c语言实现tar命令
我正在尝试使用C创建linux“tar”命令的基本版本,我使用perror查看在执行过程中是否有任何错误,我得到了这个结果用c语言实现tar命令,c,linux,tar,C,Linux,Tar,我正在尝试使用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 *
./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");
}
#包括
#包括
#包括
内部主(空)
{
焦油*pTar;
字符*前缀=”;
char*filename=“file.tar”;
if((tar_open(&pTar,filename,NULL,O_WRONLY,0644,tar_GNU))=-1)
perror(“错误1”);
else if((tar\u extract\u all(pTar,前缀))=-1)
perror(“错误2”);
否则如果((tar_close(pTar))=-1)
perror(“错误3”);
}
提前感谢:)您正在以
O_WRONLY
模式打开tar
文件,因此它会截断现有文件,而不是将其打开进行读取
当您尝试从文件中提取时,会出现错误(可能是在读取头时),这是意料之中的,因为文件内容被上一次(成功)调用破坏
请在此处查看工作示例:
- 读取一个tar文件:。他们只使用
O\u rdon
- 创建tar文件:。看起来像你的代码,只是它是用来写的,不是用来读的
if ((tar_open(&pTar, filename, NULL, O_WRONLY, 0644, TAR_GNU)) == -1)
借
(我不认为所有参数在读取模式下都有用,比如权限或tar类型,但这应该是可行的,很难为该库找到合适的示例)您在
O_WRONLY
模式下打开tar
文件,因此它会截断现有文件,而不是打开它进行读取
当您尝试从文件中提取时,会出现错误(可能是在读取头时),这是意料之中的,因为文件内容被上一次(成功)调用破坏
请在此处查看工作示例:
- 读取一个tar文件:。他们只使用
O\u rdon
- 创建tar文件:。看起来像你的代码,只是它是用来写的,不是用来读的
if ((tar_open(&pTar, filename, NULL, O_WRONLY, 0644, TAR_GNU)) == -1)
借
(我不认为所有参数在读取模式下都有用,比如权限或tar类型,但这应该是可行的,很难为该库找到合适的示例)对于将来引用该库的任何人 在创建tar时,请说abc.tar 如果您已经附加了abc.tar(它也在同一目录中,并且append_树附加了所有文件,包括一个),那么您的abc.tar文件在tar_extract_all上,这个.tar文件(具有相同的名称)也会被提取出来,覆盖原始的tar文件 至少这就是为什么我会有这种神秘的“无效的争论”。
我通过在提取之前重命名原始文件来修复它。对于将来引用此文件的任何人 在创建tar时,请说abc.tar 如果您已经附加了abc.tar(它也在同一目录中,并且append_树附加了所有文件,包括一个),那么您的abc.tar文件在tar_extract_all上,这个.tar文件(具有相同的名称)也会被提取出来,覆盖原始的tar文件 至少这就是为什么我会有这种神秘的“无效的争论”。
我通过在提取之前重命名原始文件来修复它。显示完整的错误消息和/或在调试模式下运行它以向我们显示错误发生的行。显示完整的错误消息和/或在调试模式下运行它以向我们显示错误发生的行。我尝试使用O_RDONLY模式,而不是“错误的文件描述符”错误显示“无效参数”错误。文件大小未更改,已尝试使用普通tar提取其内容,并且一切仍然安全。我确保该文件与可执行文件位于同一目录中,并将给定路径替换为绝对路径,但仍然显示相同的错误。最后,似乎不止您一人:。如果((tar_open(&pTar,filename,NULL,O_RDONLY,0,tar_VERBOSE))==-1)(无tar_GNU,并添加VERBOSE以获得调试输出)我尝试使用O_RDONLY模式,而不是“坏文件描述符”错误,它显示“无效参数”错误。文件大小没有改变,尝试使用普通tar提取其内容,但一切仍然安全我确保该文件与可执行文件位于同一目录中,并将给定路径替换为绝对路径,但仍然显示相同的错误。最后似乎不止您一人:。看起来是相同的问题。是否可以尝试
如果((tar_open(&pTar,filename,NULL,O_RDONLY,0,tar_VERBOSE))==-1)
(无tar_GNU,并添加VERBOSE以获得调试输出)