8:管道
8.1 無名管道
無名管道通常直接稱之為管道,它占用兩個檔案描述符,不能被非血緣關係
的程序共享,一般應用在父子程序中
8.2 無名管道的建立
#include
int pipe (int fildes[2]);
函式pipe在核心中建立乙個管道,並分配兩個檔案描述符標識管道的兩端,
這兩個檔案描述符儲存於fildes[0],fildes[1]中,一般約定fildes[1]
描述管道的輸入端,程序向此檔案描述符中寫入資料,fildes[0]描述管道
的輸出端,呼叫成功返回0,否則返回-1.
8.3 從父程序流向子程序的管道
1.建立管道
int fildes[2];
pipe(fildes);
2.建立子程序,子程序繼承父程序的管道檔案描述符(p210圖)
3.父程序關閉管道的輸出端,即fildes[0]
close(fildes[0]);
4.子程序關閉fildes[1]
close(fildes[1])
8.4 popen模型
#include
file *popen (const char *command, char *type);
int pclose (file *stream);
popen首先fork乙個子程序,然後呼叫exec執行引數command中給定的shell
命令,不同的是,函式popen自動在父程序與子程序之間建立了乙個管道,
r 管道資料由子程序流向父程序
w 管道資料由父程序流向子程序
8.5 有名管道的建立
1.mknod建立管道
mknod name p 建立管道檔案
mknod name s 建立訊號量
mknod name m 建立共享記憶體
例1:建立有名管道k1
mknod k1 p;
2.命令mkfifo建立管道
mkfifo [-m mode] file...
mode 是管道檔案建立後的訪問許可權,file是管道檔案建立後的名稱
例1:建立乙個使用者本身可讀寫,其他使用者唯讀的管道檔案k2
mkfifo -m 644 k2;
3.函式mkfifo建立管道
#include
#include
int mkfifo(char *path, mode_t mode);
mode 取值類似open的第三個引數,並且自帶了o_creat,o_excl選項
Linux學習筆記(管道)
管道是一種兩個程序見進行單向通訊的機制,因為管道只能對資料進行單向傳遞,所以管道又稱為半雙工管道。管道是linux由unix繼承而來的ipc形式之一。管道分為無名管道與命名管道。管道的特點 1 只能在有親緣關係的程序之間進行通訊 也就是在父子程序之間通訊 2 單向通訊乙個讀端,乙個寫端,如果要雙向通...
Linux學習筆記 管道PIPE
管道 當從乙個程序連線資料流到另乙個程序時,使用術語管道 pipe include int pipe int filedes 2 建立管道 pipe 說明 返回值 0成功,1出錯。如果呼叫成功,則程序此時由了兩個額外的開啟檔案描述符,filedes 0 中的值是管道的讀取端,而filedes 1 是...
Linux 學習筆記15 管道
在 linux ipc 程序間通訊 中,管道通訊又有三種型別,分別為標準流管道,無名管道和有名管道。file popen const char command,const char open mode int pclose file fp 函式 popen 允許乙個程式將另乙個程式作為新程序來啟動,...