無名管道:
1)管道是半雙工的,只能支援資料的單向流動;兩程序間需要通訊時需要建立起兩個管道;
2)使用無名管道通訊的程序必須擁有公共祖先程序
pipe:
1) 標頭檔案 :
#include
2) 定義函式:
int pipe(int filedes[2]);
3) 函式說明:
pipe()會建立管道,並將檔案描述詞由引數filedes陣列返回。
filedes[0]為管道裡的讀取端。
filedes[1]則為管道的寫入端。
4) 返回值:
若成功則返回零,否則返回-1,錯誤原因存於errno中。
錯誤**:
emfile
程序已用完檔案描述詞最大量
enfile
系統已無檔案描述詞可用。
efault 引數 filedes 陣列位址不合法。
pipen:
1) 標頭檔案 :
#include
2) 定義函式:
file *popen(const char *command, const char *type);
int pclose(file *stream);
3) 函式說明:
command 引數是乙個字串指標
指向的是乙個以 null 結束符結尾的字串, 這個字串包含乙個 shell 命令. 這個命令被送到 /bin/sh 以 -c 引數執行, 即由 shell 來執行.
type 引數也是乙個指向以 null 結束符結尾的字串的指標
這個字串必須是 'r' 或者 'w』 來指明是讀還是寫。
stream 引數是乙個普通的 標準i/o流, stream 只能用 pclose() 函式來關閉, 而不是 fclose() 函式.
向這個流的寫入被轉化為對 command 命令的標準輸入; 而 command 命令的標準輸出則是和呼叫 popen(), 函式的程序相同,除非這個被command命自己改變. 相反的, 讀取乙個 「被popen了的」 流, 就相當於讀取 command 命令的標準輸出, 而 command 的標準輸入則是和呼叫 popen, 函式的程序相同.注意, popen 函式的輸出流預設是被全緩衝的.
pclose() 函式等待相關的程序結束並返回 乙個 command 命令的 退出狀態, 就像 wait4 函式 一樣
有名管道:
(1)半雙工
(2)使用有名管道通訊的程序不需要有公共祖先程序
mkfifo:
1) 標頭檔案 :
#include
2) 定義函式:
int mkfifo(const char* pathname, mode_t mode);
3) 函式說明:
pathname 引數建立的fifo路徑
mode
引數指定建立的fifo訪問模式。這個訪問會與當前程序的umask程序運算,以產生實際應用的許可權模式。
4) 返回值:
若成功則返回0, 否則返回-1, 錯誤原因存於errno 中.
錯誤**:
eaccess
引數pathname 所指定的目錄路徑無可執行的許可權
eexist
引數pathname 所指定的檔案已存在.
enametoolong
引數pathname 的路徑名稱太長.
enoent
引數pathname 包含的目錄不存在
enospc
檔案系統的剩餘空間不足
enotdir
引數pathname 路徑中的目錄存在但卻非真正的目錄.
erofs
引數pathname 指定的檔案存在於唯讀檔案系統內.
Linux 管道通訊
一 定義 管道是單向的 先進先出的。它將乙個程式的輸入和另乙個程式的輸出連線起來。資料被乙個程序讀出後,將被從管道中刪除。分為無名和有名管道兩種。前者用於父程序和子程序間的通訊,後者用於同一系統的兩個程序間通訊。二 無名管道 int pipe int fd 2 其中,fd 0 用於讀管道,fd 1 ...
Linux管道通訊
現在在linux 中使用較多的程序間通訊方式主要有以下幾種。1 管道 pipe 及有名管道 named pipe 管道可用於具有親緣關係程序間的通訊,有名管道,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊。2 訊號 signal 訊號是在軟體層次上對中斷機制的一種模擬,它是比較複雜的通訊...
Linux 管道通訊
一 通訊的意義 1 傳輸資料 程序之間的通訊 2 共享資源 不同程序之間共享同一資源 3 事件通知 乙個程序向另乙個或另一組程序傳送訊息通知 4 程序控制 如debug程序等需要完全控制另乙個程序的執行,即能攔截程序操作並知曉其狀態 二 通訊的方式 1 無名管道 pipe 使用檔案操作函式 read...