無名管道雙向通訊linux

2021-09-23 14:27:50 字數 1015 閱讀 4377

基礎知識

1.linux中一種簡單且使用頻繁的程序間通訊方式

2.一種特殊的管道檔案,只存在於記憶體中,不使用外存

3.管道是單向的、先進先出的、無結構的、固定大小的位元組流

4.寫程序在管道的尾端寫入資料,讀程序在管道的首端讀出資料

資料讀出後將從管道中移走

5.管道的流控制機制:

程序試圖讀空管道時,在有資料寫入管道前,程序將一直阻塞

管道已經滿時,程序再試圖寫管道,在其它程序從管道中移走資料之前,寫程序將一直阻塞

6.限制管道的大小

管道是乙個固定大小的緩衝區

linux中,該緩衝區的大小為1頁,即4k位元組,因此不像檔案那樣不加檢驗地增長

寫管道時可能變滿,當這種情況發生時,隨後對管道的write()呼叫將預設地被阻塞,等待某些資料被讀取,以便騰出足夠的空間供write()呼叫寫   

7.讀取程序可能工作得比寫程序快

當所有當前程序資料已被讀取時,管道變空

隨後的read()呼叫將預設地被阻塞,等待某些資料被寫入

利用無名管道實現父子程序的雙向通訊

message.c

#include#include#include#include#include#include#includeint main()

res=pipe(fd2);

if(res==-1)

pid_t pid;

pid=fork();

if(pid==0)//childchar

close(fd1[0]);

close(fdz[1j);

}else if(pid >0)//parent

close(fd1[1]);

close(fd2[0]);

}

執行結果:

linux程序通訊 無名管道

linux無名管道通訊特點無名管道是半雙工的通訊方式,資料只能一方傳送,另一方接收。無名管道只適用於親緣關係的程序通訊。資料的讀出和寫入 乙個程序向管道中寫的內容被管道另一端的程序讀出。寫入的內容每次都新增在管道緩衝區的末尾,並且每次都是從緩衝區的頭部讀出資料。include include inc...

Linux 程序通訊(無名管道)

無名管道 無名管道是半雙工的,就是對於乙個管道來講,只能讀,或者寫。無名管道只能在相關的,有共同祖先的程序間使用 即一般使用者父子程序 乙個fork或者execve呼叫建立的子程序繼承了父程序的檔案描述符。開啟和關閉管道 int pipe int filedes 2 在你從乙個管道中讀出或者寫入資料...

JXTA 雙向通訊

jxta 雙向通訊 可以通過 jxtaserversocket jxtasocket和 jxtaserverpipe jxtabidipipe 來實現 其實現的過程非常的類是我們做ftp的時候所採用的serversocket socket機制,也就是服務斷監聽客戶端連線的原理。以jxtaserver...