1
我建立一個程序具有類似功能的外殼,我想知道如何執行配管作業。因此,當系統執行program1 arg | tee output-file
時,系統將連接tee
中的stdin
到program1
中的stdout
以及捕獲任何stderr
和最終的stdout
。
我建立一個程序具有類似功能的外殼,我想知道如何執行配管作業。因此,當系統執行program1 arg | tee output-file
時,系統將連接tee
中的stdin
到program1
中的stdout
以及捕獲任何stderr
和最終的stdout
。
向用於管:
int p[2];
pipe(p);
第一程序的exec()
之前,它的標準輸出綁定到它,並關閉其它FDS:
dup2(p[0], STDOUT_FILENO);
close(p[0]);
close(p[1]);
第二的exec()
之前程序重定向其標準輸入:
dup2(p[1], STDIN_FILENO);
close(p[0]);
close(p[1]);
您還將必須在fork()
之後關閉主程序中管道的兩端,並且完成(用於管道設置)。
管道最常見的錯誤之一是沒有關閉足夠多的文件描述符。這段代碼避免了這個問題。 –
它是,但它會類似於UNIX上的c + +,但我真的不知道如何執行該問題的管道操作。 – topherg
在那裏的答案中的代碼應該工作得很好,因爲C和C++,以及任何類Unix,包括Linux,BSD,Mac OS,Solaris ... – bdonlan
@bdonlan righto,我不知道他的函數如何在其餘的內部使用它會運行請求字符串並在'|'點拆分,然後運行1到2,然後2運行到3(如果超過2)? – topherg