LinuxC C 程式設計(4) 管道通訊

2021-07-12 01:33:58 字數 1136 閱讀 5021

管道是linux為程序提供的一種通訊方式,這裡所說的管道只能用於有血緣關係的程序(一般是子程序和父程序之間)。一般用來做程序同步和程序間通訊。

linux中提供的有名管道的建立函式為:int pipe(int pipe[2]);

pipe(建立管道):

1) 標頭檔案 #include2) 定義函式: int pipe(int filedes[2]);

3) 函式說明: pipe()會建立管道,並將檔案描述詞由引數filedes陣列返回。

filedes[0]為管道裡的讀取端

filedes[1]則為管道的寫入端。

4) 返回值: 若成功則返回零,否則返回-1,錯誤原因存於errno中。

錯誤**:

emfile 程序已用完檔案描述詞最大量

enfile 系統已無檔案描述詞可用。

efault 引數 filedes 陣列位址不合法。*/

對於管道的讀寫都是直接通過讀寫檔案描述符filedes完成。且預設阻塞,即管道資料滿的時候寫操作被阻塞,資料空的時候讀操作被阻塞。

下面貼一段簡單的**:

#include #include #include using namespace std;

int main()

else if (pid > 0)

else if (pid == 0)

waitpid(pid, null ,0); //包含於,等待子程序結束並清理其資源

return 0;

}

控制台的輸出結果如下:父程序傳送的字串在子程序中列印了:

i'm the parent process! now write to the pipe!

i'm the child process! now i've recerive the message:heiheihei

如果要設定管道為非阻塞模式,可以通過下面兩個函式實現:

fcntl(filedes[0], f_setfl, o_nonblock);

fcntl(filedes[1], f_setfl, o_nonblock);

無名管道通訊程式設計

通訊目的 資料傳輸 資源共享 通知事件 程序控制 程序間通訊ipc interprocess communication 由以下幾部分發展而來 1.unix程序間通訊 2.基於system v程序間通訊 3.posix程序間通訊 posix portable operating system int...

windows程式設計之命名管道通訊

管道分為兩種,一種是匿名管道,一種是命名管道。兩者都可以進行程序間的通訊,但匿名管道有侷限性,它只能在本機上使用,而不能跨網路使用。但是命名管道就不一樣了,它彌補了匿名管道的侷限性。接下來看下,如何在windows平台下,進行命名管道的通訊。首先,要進行兩個進行間的通訊,必須要有乙個程序主動一點,來...

linux c c 程式設計之 程序操作

程序 系統呼叫 getpid 可以得到程序的 id,而 getppid 可以得到父程序 建立呼叫該函式程序的程序 的 id.include pid t getpid void pid t getppid void struct passwd include include 程序的建立 include...