程序通訊的例項 管道 pipe

2021-06-13 06:16:44 字數 1454 閱讀 6337

4.7.5 程序通訊的例項--管道(pipe)

1.管道pipe

程序通訊的使用例子之一是unix系統的管道通訊。unix系統從system v 開始,提供有名管道無名管道兩種通訊方式,這裡介紹無名管道。

無名管道為建立管道的程序及其子孫提供一條以位元流方式傳送訊息的通訊管道。該管道再邏輯上被看作管道檔案,在物理上則由檔案系統的高速緩衝區構成,而很少啟動外設。傳送程序利用檔案系統的系統呼叫write(fd[1],buf,size),把buf種的長度為size字元的訊息送入管道入口fd[1],接收程序則使用系統呼叫read(fd[0],buf,size)從管道出口fd[0]出口讀出size字元的訊息置入buf中。這裡,管道按fifo(先進先出)方式傳送訊息,且只能單向傳送訊息(如圖)。

圖 管道通訊

利用unix提供的系統呼叫pipe,可建立一條同步通訊管道。其格式為:

int fd[2];

pipe(fd)

這裡,fd[1]為寫入端,fd[0]為讀出端。

2.示例

例1:用c語言編寫乙個程式,建立乙個pipe,同時父程序生成乙個子程序,子進向pipe中寫入一字串,父程序從pipe中讀出該字串。

解  程式如下:

# include main()

else

}

例2:編寫一程式,建立乙個管道。同時,父程序生成子程序p1,p2,這兩個程序分別向管道中寫入各自的字串,父程序讀出它們(如圖)。

圖  父程序和子程序p1,p2通訊例子

#include < stdio.h>

main( )

else /*從父程序返回,執行父程序*/

圖 例2程式流程圖

其中,lockf為保證程序互斥使用管道的系統呼叫,sleep為保證當前程序睡眠,轉讓處理機的系統呼叫。

程序間通訊(IPC) 管道(Pipe)

管道 乙個程序連線資料流到另乙個程式 pipe函式的原型 include int pipe int file descriptor 2 該閃身在陣列中填上兩個新的檔案描述符後返回0,如果失敗則返回 1。寫到file descriptor 1 的所有資料都可以從file descriptor 0 讀回...

程序間通訊(1) 管道pipe

學習linux的知識中,有乙個特別重要的概念叫 程序 而要進行程序間通訊時,有乙個特別重要的概念就是 管道,今天,我們就來學習一下什麼是管道,它能又幹什麼呢?一 概念 管道 把乙個程序連線到另外乙個程序的乙個資料流稱為管道。其實,我們聯絡現實生活,自來水管可以將我們使用者和供水站連線起來,通過管道運...

程序間通訊 無名管道PIPE

無名管道pipe 僅在記憶體中存在,檔案系統不可見 無名 有名 管道 管道是一種程序間通訊機制,好比乙個管子,一邊乙個口,乙個往裡放,另一頭可以往出取,操作是雙向的 無名管道特點 只能用於有親緣關係的近緣之間的通訊 單工的通訊模式,具有固定的讀端和寫段 無名管道建立時會返回兩個檔案描述符,分別用於讀...