管道是程序間通訊的最原始方式,今天我們利用管道的程序間通訊,來實現簡單的程序間單向通訊
首先我們需要了解命名管道的一些特性命名管道的使用與建立
然後建立乙個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 ...