利用管道實現程序間的單向通訊

2021-08-31 11:28:40 字數 1921 閱讀 2307

管道是程序間通訊的最原始方式,今天我們利用管道的程序間通訊,來實現簡單的程序間單向通訊

首先我們需要了解命名管道的一些特性命名管道的使用與建立

然後建立乙個fifo_c的檔案來實現輸入資料和傳送資料

/*這是乙個命名管道的實現,往命名管道中寫入資料,並且傳送給另乙個程序

* 1. 建立乙個命名管道

* int mkfifo(const char*pathname,mod_t mod);

* pathname:管道的檔案路徑名字

* mod:管道檔案的許可權

* 成功返回0, 失敗返回-1

* 2.開啟管道open

* 3.往管道中寫入資料

* 4.關閉管道檔案close

*/#include#include#include#include#include#include//檔案操作的標頭檔案

int main()

else

}//2.開啟管道檔案

//開啟特性:如果以唯讀開啟命名管道,那麼open函式將阻塞等待,直到有其他程序以寫的方式開啟這個命名管道

//只寫反之亦然

//如果檔案以讀寫的方式發開,則不會阻塞

int fd=open("./test.fifo",o_wronly);//以只寫的方式開啟管道

if(fd<0)

printf("open fifo file success!!read start!\n");

while(1);

scanf("%s",buff);//從鍵盤輸入資料

write(fd,buff,strlen(buff));

sleep(1);

}close(fd);

return 0;

}

建立乙個fifo來接收列印資料

/*這是乙個命名管道的實現,從命名管道中讀取資料列印

* 1. 建立乙個命名管道

* int mkfifo(const char*pathname,mod_t mod);

* pathname:管道的檔案路徑名字

* mod:管道檔案的許可權

* 成功返回0, 失敗返回-1

* 2.開啟管道open

* 3.從管道中讀取資料

* 4.關閉管道檔案close

*/#include#include#include#include#include#include//檔案操作的標頭檔案

int main()

else

}//2.開啟管道檔案

//開啟特性:如果以唯讀開啟命名管道,那麼open函式將阻塞等待,直到有其他程序以寫的方式開啟這個命名管道

//只寫反之亦然

//

//如果檔案以讀寫的方式發開,則不會阻塞

int fd=open("./test.fifo",o_rdonly);

if(fd<0)

printf("open fifo file success!!read start!\n");

while(1);

int ret=read(fd,buff,1023);

if(ret>0)else if(ret==0)

}close(fd);

return 0;

}

執行,fifo_c和fifo兩個程序,給fifo_c輸入"你好啊! ! !"

fifo接收到

利用管道實現程序間通訊

管道 pipe 是程序用來通訊的共享記憶體區域。乙個程序往管道中寫入資訊,而其它的程序可以從管道中讀出資訊。如其名,管道是程序間資料交流的通道。郵路 mailslots 的功能與管道類似,也是程序間通訊 interprocess communications,ipc 的媒介,只不過其具體實現方式與管...

利用管道實現多程序間通訊

管道是linux系統最常見的程序間通訊方式之一,它在兩個程序之間實現乙個資料流通的通道,資料以一種資料流的方式在程序間流動。它把乙個程式的輸出直接連到另乙個程式的輸入。管道可以分為以下兩種,利用這兩種管道可以實現程序間的通訊,但是對於程序間的關係會有所限制 解決和 方法如下,資料以字元為例,通訊的內...

利用管道實現程序間同步

程序間同步是指程序的執行有先後順序,如a程序等待b程序執行完某個動作a程序才能繼續往下執行。程序間通訊的方法都可以用來同步,只是操作是否方便的乙個問題。複習了unix高階程式設計,覺得posix的訊號量是使用起來最方便的。可是無奈程式寫完放到板子裡面跑時,列印提示sem open function ...