無名管道又被稱為pipe,是程序間通訊的一種方式。pipe具有以下特點:
●只能用於具有血緣關係的程序之間
●半雙工的通訊模式,具有固定的讀端和寫端
●一種特殊的檔案,存在於記憶體中。可通過read、write對其操作
因為pipe存在於記憶體中,所以無法像操作普通檔案那樣通過指定路徑來開啟檔案。通常的做法是在父程序中建立管道,再建立子程序。由於子程序繼承了父程序開啟的檔案描述符,所以父子程序就可以通過建立的管道進行通訊。
為了在父程序中建立管道,需要先定義乙個包含兩個元素的整型陣列,用來存放管道讀端和寫端對應的檔案描述符。該陣列在建立管道時作為引數傳遞。要注意的是,管道是一種半雙工方式,即對於程序來說,要麼只能讀管道,要麼只能寫管道。不允許對管道又讀又寫。
其中陣列的第乙個元素固定代表管道的讀端,第二個元素代表管道的寫端。對於乙個程序來說,只會用到其中乙個。
若讀取管道時沒有資料,則程序會被阻塞,直到有資料可讀。寫管道時除非管道已滿,一般情況下寫入操作很快會返回。
int pfd[2];
pid_t pid;
if ( pipe(pfd) < 0 ) // 建立管道失敗
if ( (pid=fork()) == -1 ) // 建立子程序失敗
else if ( pid == 0 ) // 子程序
else // 父程序
linux管道(無名管道)
首先管道是程序之間的乙個單向資料流,它的資料流向由核心管理,只能從乙個程序流向另外乙個程序,乙個程序向管道寫入資料,另外乙個程序從這個管道讀取資料。在使用管道 無名管道 時,只能用在父子程序或者親屬程序之間,若要用在任意程序之間則需要使用fifo 有名管道 如圖程序ab通過管道進行資料交換。程序a通...
Linux管道(無名管道)
是一套免費使用和自由傳播的類unix作業系統,是乙個基於posix和unix的多使用者 多工 支援多執行緒和多cpu的作業系統。它能執行主要的unix工具軟體 應用程式和網路協議。它支援32位和64位硬體。linux繼承了unix以網路為核心的設計思想,是乙個效能穩定的多使用者網路作業系統。它主要用...
無名管道的通訊
通過使用管道實現兩個或多個程序之間的通訊。所謂管道,就是將乙個程序的標準輸出與另乙個程序的標準輸入聯絡在一起,進行通訊的一種方法。同組程序之間可用無名管道任意通訊,而不同組程序之間可通古共有名管道進行通訊。使用無名管道pipe 進行父子程序之間的通訊。分析 父程序首先使用pipe chanl 系統呼...