一直在做一个shell项目。我已经设置了 I/O 重定向,但我显然遗漏了一些东西,因为当使用如下行进行测试时:“ls -al > outfile”它会在我的桌面上创建 outfile,但将其留空并且程序返回以下错误:
ls: >: No such file or directory
Error: Failure to wait for child.
: Interrupted system call
这是我的代码:
pid_t child = fork();
if (child < 0)
{
perror( "Error: Fork failure.\n" );
exit(1);
}
else if (child == 0)
{
//If < file (read)
if (inpt)
{
int fd_in = open(argumnts[index+1], O_RDONLY, 0);
dup2(fd_in, STDIN_FILENO);
close(fd_in);
inpt = 0;
}
//If > file (create or truncate)
if (outpt)
{
int fd_out_A = open(argumnts[index+1], O_CREAT | O_TRUNC, 0666);
dup2(fd_out_A, STDOUT_FILENO);
close(fd_out_A);
outpt = 0;
}
execvp (argumnts[0], argumnts);
perror(command);
exit(0);
}
else
{
inpt = 0;
outpt = 0;
outptApp = 0;
if ( waitpid(child, 0, WUNTRACED) < 0 )
perror( "Error: Failure to wait for child.\n" );
}
}
} //End While(1) loop
比较器函数只是检查输入的命令参数是“<”、“>”还是“>>”,然后返回包含它的索引。
不确定我在这里缺少什么,但它会返回前面提到的错误。任何想法?