我瞭解管道要運行的命令,如ls -l | wc -l:輸入重定向和管道
int pipes[2];
pipe(pipes);
if (fork() == 0){ //first fork
dup2(pipes[1],1);
close(pipes[0]);
close(pipes[1]);
execvp(arr1[0], arr1); //arr1[0] = "ls" and arr1[1] = "-l" and arr1[2] = 0
perror("Ex failed");
exit(1);
}
if (fork() == 0){ //2nd fork
close(pipes[1]);
dup2(pipes[0],0);
close(pipes[0]);
execvp(arr2[0], arr2); //arr2[0] = "wc" and arr2[1] = "-l" and arr2[2] = 0
perror("Ex failed");
exit(1);
}
但是,如何包含輸入和輸出重定向?可以說我想貓< foo.txt | wc -l
我知道第一個fork需要修改,但我不明白需要什麼(另一個dup2()?)。我將不勝感激一些幫助。
謝謝。
你希望用'dup2(pipes [1],[1])完成什麼?這是無效的語法;我認爲你的意思是'dup2(管道[1],STDOUT_FILENO);'? –
這是一個錯字。我會解決它。 – user5832523