程序通訊 無名管道

2021-07-23 23:38:50 字數 1279 閱讀 8469

管道是單向的、先進先出的,它把乙個程序的輸出和另乙個程序的輸入連線在一起。

管道包括無名管道和有名管道兩種,前者用於父程序和子程序間的通訊,後者可用於執行於同一系統中的任意兩個程序間的通訊。

乙個程序(寫程序)在管道的尾部寫入資料,另乙個程序(讀程序)從管道的頭部讀出資料。管道提供了簡單的流控制機制,程序試圖讀空管道時,程序將阻塞。同樣,管道已經滿時,程序再試圖向管道寫入資料,程序將阻塞

建立管道pipe

讀管道read

寫管道write

關閉管道close

函式作用:建立無名管道

函式原型:int pipe(int fds[2]);

函式引數:fds:檔案描述符 fds[0]用於讀管道 fds[1]用於寫管道

返回值 :成功:返回0 失敗:返回-1

標頭檔案 :#include

pipe.c

#include 

#include

#include

#include

int main()

else

close(pipe_fd[0]);//關閉讀埠

close(pipe_fd[1]);//關閉讀埠

}無名管道用於在父子程序之間通訊,通常先建立乙個管道,再通過fork函式建立乙個子程序,該子程序會繼承父程序所建立的管道

必須在系統呼叫fork( )前呼叫pipe( ),否則子程序將不會繼承檔案描述符

pipe——rw.c

#include

#include

#include

#include

#include

int main()

/*建立子程序*/

if((pid=fork()) == 0) //子程序

close(pipe_fd[0]);//關閉讀埠

exit(0);

}else

if(pid > 0)//父程序

return

0;}

1.管道通訊是單向的,有固定的讀端和寫端。

2.資料被程序從管道讀出後,在管道中該資料就不存在了,而檔案會儲存資料。

3.當程序去讀取空管道的時候,程序會阻塞,檔案為空時返回也為空

4.當程序往滿管道寫入資料時,程序會阻塞,檔案沒有容量限制

5.管道容量為64kb(#define pipe_buffers 16 include/linux/pipe_fs_i.h)

linux程序通訊 無名管道

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

程序間通訊 無名管道

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

Linux 程序通訊(無名管道)

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