程序間的通訊方式之管道通訊

2021-07-24 01:49:55 字數 1918 閱讀 7532

一、管道通訊的特點

1. 管道是單向的,先進先出的。

2.乙個程序在管道尾部寫入資料,另乙個程序在管道頭部讀取資料。因此管道通訊是半雙工的。

3. 管道提供了簡單的流控制機制,當程序試圖讀空管道時,程序將阻塞。當管道已經寫滿時,程序再試圖向管道寫入資料,程序將阻塞。

4.資料被程序讀出,將從管道中刪除

二、管道通訊的區別

1、有名管道

2、無名管道

三、兩種管道通訊的區別

1、有名管道:同一系統中任意兩個程序間的通訊

2、無名管道:用於父子程序之間

四、建立無名管道 -- pipe

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

函式引數:filedes[2]為兩個新建的檔案描述符,其中fd[0]表示管道讀取端,fd[1]用於管道寫入端。

標頭檔案: #include

返回值:成功返回0,失敗返回-1。 例:

[plain]view plain

copy

#include 

#include 

#include 

#include 

#include 

#include 

#include 

int main()    

if((pid = fork()) == 0)    

close(pipe_fd[0]);    

exit(0);    

}    

else if(pid > 0)    

return 0;    

}  

六、建立有名管道 -- fifo

函式原型:int mkfifo(const char * pathname,mode_t mode);

函式引數:pathname --建立有名管道的名稱

mode --建立的方式,類似於open

標頭檔案:#include

#include

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

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#define fifo "/root/1022/myfifo"  

intmain(

intargc,

charchar

**argv)    

while(1

)    

printf("read %s from fifo\n"

,r_buf);    

sleep(1

);    

}    

pause();    

unlink(fifo);    

}    

[plain]view plain

copy

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#define fifo_server "/root/1022/myfifo"    

main(int argc,charchar **argv)    

strcpy(w_buf,argv[1]);    

if(nwrite = write(fd,w_buf,100) == -1)    

else    

printf("write %s to fifo\n",w_buf);    

return 0;    

}  

程序間通訊方式 管道通訊

c語言中的管道通訊是通過在核心中開闢一塊空間,使用者通過檔案io介面來訪問這塊空空間實現通訊目的。管道的優點是直接訪問記憶體,通訊速度較快。缺點是一方面管道屬於半雙工的通訊,即同一程序只能讀或者寫,無法同時讀寫同一管道。另一方面管道中的資料只能讀一次,無法重複讀取。程序通過檔案io來操作管道,但是不...

程序間通訊方式 管道

1.管道的建立 管道是由呼叫pipe函式來建立 include int pipe int fd 2 返回 成功返回0,出錯返回 1 是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係 父子程序 的程序間使用。2.有名管道和無名管道的區別 有名管道 可以在任意兩個程序之間,有名的名字存在...

程序間通訊 之 管道

一 無名管道 特點 具有親緣關係的程序間通訊,但不僅僅指父子程序之間哦。1 無名管道的建立 int pipe int pipefd 引數 pipefd 陣列的首位址 返回值 成功返回0,失敗返回 1 注意 無名管道存在核心空間,建立成功會給使用者空間兩個檔案描述符,fd 0 讀管道 fd 1 寫管道...