管道技術是Linux的一種基本的進程間通信技術。在本文中,我們將為讀者介紹管道技術的模型,匿名管道和命名管道技術的定義和區別,以及這兩種管道的創建方法。同時,闡述如何在應用程序和命令行中通過管道進行通信的詳細方法。
一、管道技術模型
管道技術是Linux操作系統中歷來已久的一種進程間通信機制。所有的管道技術,無論是半雙工的匿名管道,還是命名管道,它們都是利用FIFO排隊模型來指揮進程間的通信。對於管道,我們可以形象地把它們當作是連接兩個實體的一個單向連接器。例如,請看下面的命令:
ls -1 | wc -l
該命令首先創建兩個進程,一個對應於ls –1,另一個對應於wc –l。然後,把第一個進程的標准輸出設為第二個進程的標准輸入(如圖1所示)。它的作用是計算當前目錄下的文件數量。
圖1:管道示意圖
如上圖所示,前面的例子實際上就是在兩個命令之間建立了一根管道(有時我們也將之稱為命令的流水線操作)。第一個命令ls執行後產生的輸出作為了第二個命令wc的輸入。這是一個半雙工通信,因為通信是單向的。兩個命令之間的連接的具體工作,是由內核來完成的。下面我們將會看到,除了命令之外,應用程序也可以使用管道進行連接。