一直在使用shell項目。我已經設置了I/O重定向,但是我顯然錯過了一些東西,因爲當用像「ls -al> outfile」這樣的行進行測試時,它會在我的桌面上創建outfile,但將其保留爲空,並且程序將返回以下錯誤:Linux shell上的I/O重定向
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
比較函數只是檢查是否命令參數輸入的是 「<」, 「>」 或 「>>」,然後返回包含它的索引。
不知道我在這裏錯過了什麼,但它會改變之前提到的錯誤。任何想法?
您將在傳遞給'execvp()'的'arguments'數組中離開重定向操作符。所以'ls'試圖列出名爲'>'的文件。 – Barmar
謝謝,這幫助了第一個錯誤。 – Gus