系統程式設計 程序間通訊 無名管道

2022-03-13 16:41:10 字數 1150 閱讀 1432

管道檔案是乙個特殊的檔案,是由核心環形佇列來實現的。

函式形式: int pipe(int fd[2]) ,無需額外呼叫open,但需手動呼叫close來關閉fd[0]和fd[1]。

功能: 該系統呼叫,用於建立無名管道。無名管道作用於有血緣關係的程序之間,完成資料傳遞。

標頭檔案:#include

引數:兩個檔案描述符,fd[0]是讀端,fd[1]是寫端

返回值: 成功返回0,出錯返回-1。

特點:** 管道是建立在記憶體中的,程序結束,空間釋放,管道就不存在了。

** 管道中的資料,讀完後就被刪除了。

** 如果管道中沒有資料可讀,則會阻塞

** 如果管道被寫滿了,也會阻塞

侷限性:

**資料一旦被讀走,便不在管道中存在,不可反覆讀取。

**由於管道採用半雙工通訊方式。因此,資料只能在乙個方向上流動

**只能在有公共祖先的程序間使用管道

實驗1 -  實現父子程序間通訊

實驗思路:

1. 父程序呼叫pipe函式建立無名管道,得到兩個檔案描述符fd[0]、fd[1]指向管道的讀端和寫端。

2. 父程序呼叫fork建立子程序,那麼子程序也有兩個檔案描述符指向同一管道。

3.父程序關閉管道讀端,子程序關閉管道寫端。(這才是正確操作,只留乙個入口,乙個出口,這樣才能保證資料只在乙個方向上流動)

父程序可以向管道中寫入資料,子程序將管道中的資料讀出。

由於管道是利用環形佇列實現的,資料從寫端流入管道,從讀端流出,這樣就實現了程序間通訊。

實驗**:

#include #include 

#include

#include

#include

void sys_err(const

char *str)

int main(void

)else

if (pid == 0

) else

return0;

}

程序間通訊 無名管道

在上次的部落格中,我給大家介紹了程序間通訊的方式 有名管道。管道分為有名管道和無名管道,那麼此次我將給大家介紹一下另一種管道通訊 無名管道。有名管道是可以應用於任何兩個程序之間資料的單向傳遞,而無名管道是相對於有名管道的,無名管道在使用時產生,不使用後釋放,並不會在系統上留下任何痕跡。無名管道因其使...

程序間通訊 無名管道

1.無名管道 pipe 2.有名管道 fifo 3.訊號 signal 4.共享記憶體 share memory 5.訊息佇列 message queue 6.訊號燈集 semaphore set 7.套接字 1.只能用於具有親緣關係的程序之間的通訊 父子或兄弟程序 2.彈弓的通訊模式,具有固定的讀...

程序間通訊 有名管道 無名管道

顧名思義,管道就像是將資料放入到乙個長長的管子中一樣,肯定會有一端寫入資料,稱為寫端,有一段讀出資料,稱為讀端。既然是說像管子一樣那麼它肯定有大小吧,資源不是無窮無盡的,預設下管道的大小是64k,用ulimit a 可以檢視。1 無名管道 管道是半雙工的,資料只能向乙個方向流動 需要雙方通訊時,需要...