2
可以說我的程序中我想執行兩個子進程,一個執行「ls -al」命令,然後將其傳送到「wc」命令並在終端上顯示輸出。我怎樣才能做到這一點使用管道文件描述符到目前爲止,我寫的代碼:一個例子是大大有益的使用fork和dup的Unix管道
int main(int argc, char *argv[]) {
int pipefd[2];
int pipefd2[2];
pipe(pipefd2);
if ((fork()) == 0) {
dup2(pipefd2[1],STDOUT_FILENO);
close(pipefd2[0]);
close(pipefd2[1]);
execl("ls", "ls","-al", NULL);
exit(EXIT_FAILURE);
}
if ((fork()) == 0){
dup2(pipefd2[0],STDIN_FILENO);
close(pipefd2[0]);
close(pipefd2[1]);
execl("/usr/bin/wc","wc",NULL);
exit(EXIT_FAILURE);
}
close(pipefd[0]);
close(pipefd[1]);
close(pipefd2[0]);
close(pipefd2[1]);
}
關閉一個'dup''d文件描述符關閉另一個是**不是**。關閉只是刪除打開文件的一個句柄。文件本身在所有的'dup''d文件描述符都關閉之前不會關閉。 – caf 2010-04-07 07:42:10
哦,你*應該關閉父文件中的'pipefd'文件描述符 - 它不需要它們(並且直到父文件在寫入結束時關閉它的句柄,閱讀子文件纔會看到文件結束) 。同樣,'close()'只能刪除你傳遞它的句柄,直到* every *進程中的所有句柄都關閉,底層管道纔會關閉。 – caf 2010-04-07 07:49:35
你是多麼的正確,咖啡,更正,謝謝。 – msw 2010-04-07 12:33:42