基礎知識
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...