嗨,我有麻煩包裝我的頭周圍這個概念。從C外部文件(或控制文件)管道中的兩個文件unix
我需要執行兩個文件可以說,從交流CONTROL.C叫
我要管的交流輸出到BC的輸入
據我所知,文件描述符(控制文件& BC FD): FD 0 = stdin中 FD 1 =標準輸出
據我所知,創建一個管需要一個整數數組(二FDS)
e.g.
zpipe[2]
pipe(zpipe)
我想執行文件a和b並將a的輸出傳送到b的輸入。
但是我對這個概念感到困惑,因爲打開或閱讀所述文件會創建一個新的fd。我知道通過調用fda = dup2(fd,0)可以將fd(例如fda)設置爲0。這會不會因爲0現在關閉而破壞管道?
,如果我叫
execvp("a.c", args)
execvp("b.c", args)
如何將我保證這些文件被正確管道和等待?
你的命名是混亂(以我們),或者說你感到困惑,通常,'ac'是一個C源文件 - 它將被編譯成一個獨立的程序'a'(或者''a.exe'),你運行程序或執行它們。如果有一個名爲'ac'的可執行程序是不尋常的(不是不可能,但絕對不尋常),對於'bc'和'b'也是如此,你可以調用'if(dup2(zpipe [0],0)!= 0 ){...處理錯誤...}'或'if(dup2(zpip e [1],1)!= 0){...句柄錯誤...}'。 –
你必須決定是否'control'創建管道和fork兩次,一次運行'a'和一次運行'b',或者'control'用'a'或'b'中的一個替換它自己,還是「控制」叉子和孩子創建管道,然後叉子和孫子運行一個進程(可以是'a'或'b'),而小孩運行另一個進程,'control'等待孩子完成。一切皆有可能;在沒有其他信息的情況下,尚不清楚是否存在「最佳」解決方案。如果'control'需要做更多的事情,那麼單叉解決方案將不合適。 –
嗨,Jonathan a.c純粹用作示例名,它可能是ex1.c&ex2.c或其他。我試圖做的目標是從a.c(或ex1.c視情況而定)輸入並將它們發送給b.c進行處理和輸出。但經過進一步的研究後,我注意到最好的做法是「創建管道和分叉兩次」的方法,但即時通訊仍在努力理解控制如何控制管道流量 - > b – rowboat