將乙個程式的輸出接到兩個程式的輸入

2021-04-21 09:51:55 字數 604 閱讀 9551

unix的管道是個好東西,可以串起幾個命令來實現強大的功能。不過有時候如果想要把乙個程式的輸出接到兩個程式的輸入,單靠 | 是不成了。要麼先把程式的輸出重定向到乙個檔案,不過這在輸出量很大的時候不算是乙個好辦法。

下面是實現這種功能的乙個方法:

mkfifo /tmp/fifo

prog2 < /tmp/fifo &

prog1 | tee /tmp/fifo | prog3

這就會把prog1 的標準輸出同時給 prog2 和 prog3 的標準輸入。

這裡mkfifo是建立乙個命名管道,這樣可以有多個管道使,tee 則會把輸出同時輸出到乙個檔案和標準輸出,實現了分岔。prog2 < /tmp/fifo & 這裡要加個 &,不然管道裡沒資料 prog2就會阻塞。

這幾行東西是從《unix環境高階程式設計》上看來的。利用命名管道,還可以變出別的東西。

比如用diff比較兩個命令的輸出。

mkfifo /tmp/fifo1

mkfifo /tmp/fifo2

ls dir1 > /tmp/fifo1 &

ls dir2 > /tmp/fifo2 &

diff /tmp/fifo1 /tmp/fifo2

tc下的c程式(乙個屏變成兩個)

問題的提出 編制乙個程式,將螢幕垂直平分成兩個視窗,左邊視窗為藍色背景,白色 前景,右邊視窗為綠色背景,紅色前景。兩個視窗都設計為文字輸入,即在視窗中可以輸入 文字,在視窗螢幕中顯示出來。使用tab 鍵在左右兩個視窗中切換,每個視窗都有游標,活 動視窗游標進行閃爍。code include incl...

py程式 兩個判斷回文的程式

a input 輸入一段話 b int len a 算出這段話的字數 c int len a 2 print b if b 2 and a 0 a 1 print 是回文 quit elif b 3 and a 0 a 1 print 是回文 quit elif b c 2 and a c a c ...

編寫兩個不同的可執行程式,乙個開啟檔案,乙個讀檔案

2 編寫兩個不同的可執行程式,名稱分別為a和b,b為a的子程序。在a程式中呼叫open函式開啟a.txt檔案。在b程式不可以呼叫open或者fopen,只允許呼叫read函式來實現讀取a.txt檔案。a程式中可以使用 fork與execve函式建立子程序 makefile 檔案 suffixes c...