重定向和管道——讓Linux如虎添翼

Linux操作系統設計了重定向和管道,讓“組合”的威力碩大無比,這是Windows無法比擬的,廢話少說,下面看看幾個例子。

首先利用vi編輯器寫個簡單的C程序吧,就叫avg.c吧,如下圖所示。


程序邏輯很簡單,就是輸入sum和n然後輸出sum/n的值。

下面編譯、運行一把,如下圖所示。


接下來見識一下重定向的威力,可以將標準輸出重定向到一個文件中,如下圖所示。圖中用./avg.out >>avg.txt命令將標準輸出重定向到avg.txt文件中,終端不再輸出提示信息,直接輸入80,10,再cat avg.txt,可以看到標準輸出已經重定向到avg.txt文件中。再次輸入./avg.out >>avg.txt命令,輸入80,20,標準輸出再次追加到文件中。


如果希望標準輸出以覆蓋的顯示重定向到avg1.txt文件中,輸入命令./avg.out >avg.txt即可,注意只有一個“>”,如下圖所示。


那麼可不可以重定向到標準輸入流呢?答案是肯定的。首先新建一個文件input.txt,裏面存放待輸入程序的數據80,10,如下圖所示。


接下來,通過命令./avg.out <input.txt即可將文件重定向到標準輸入流,如下圖所示。


還可以將錯誤流重定向到文件,通過命令./avg.out 1>>a.txt 2>>b.txt,將標準輸出流重定向到a.txt文件。錯誤流重定向到b.txt,如下圖所示。


接下來該見識一下管道的威力了,據此,在寫一個簡單的C程序input.c,如圖下圖所示。


這回,通過管道,把input.out和avg.out連接起來,一個程序完成輸入數據並求和及其統計輸入個數,一個求平均值,據此,通過管道,完成了諸如輸入公司每個員工的工資,求公司員工的平均工資,輸入學生各科成績,求學生的平均成績之類的功能。輸入./input.out | ./avg.out命令即可完成功能,如下圖所示。


那麼,將管道和重定向集合起來會怎麼樣呢?威力會更大!如下圖所示。


正如你所料的,這回你可以把數據保存在文件了,然後通過一條命令./input.out <input.txt | ./avg.out >>output.txt即可將兩個可執行文件連接起來,最後將運行結果重定向到output.txt文件中。

至此,Linux的重定向和管道的用法就差不多了,我們可以看到,通過重定向和管道機制,可以將幾個功能簡單的小程序組合起來,完成更加強大的功能,Linux就是靠這種機制,使自己如虎添翼,無懈可擊!

發佈了42 篇原創文章 · 獲贊 65 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章