管道實現通訊的方式簡單易懂,但乙個不足之處就是管道沒有名字,因此,只能用於具有親緣關係的程序間通訊,在命名管道(named pipe或fifo)提出後,該限制得到了克服。fifo不同於管道之處在於它提供乙個路徑名與之關聯,以fifo的檔案形式儲存於檔案系統中。命名管道是乙個裝置⽂檔案,因此,即使程序與建立fifo的程序不存在親緣關係,只要可以訪問該路徑,就能夠通過fifo相互通訊。值得注意的是,fifo(first input first output)總是按照先進先出的原則工作,第乙個被寫⼊入的資料將首先從管道中讀出。
下面編寫程式進行測試,程式分兩部分,分別為讀端和寫端:
寫端為server
#include
#include
#include
#include
#include
#include
#define _path_ "./fifo"
int main()
int fd = open(_path_, o_wronly);
if (fd < 0)
int time = 0;
char *msg = "hello world";
while (time++ < 100) //迴圈寫入
close(fd);
return
0;
}
讀端為client
#include
#include
#include
#include
#include
#include
#define _path_ "./fifo"
int main()
int time=0;
char buf[100];
memset(buf,'\0',sizeof(buf));
while(time++<100)
printf("%s\n",buf);
if(strncmp(buf,"quit",4)==0) //退出條件
break;
}close(fd);
return
0;}
先執行server端
在執行client端
client端不斷接收到server端寫入的資訊。
Linux下程序間通訊 命名管道
管道是一種兩個程序間進行單向通訊的機制。因為管道傳遞資料的單向性,管道又稱為半雙工管道。管道的這一特點決定了器使用的侷限性。管道是linux支援的最初unix ipc形式之一,具有以下特點 1,資料只能由乙個程序流向另乙個程序 其中乙個讀管道,乙個寫管道 如果要進行雙工通訊,需要建 立兩個管道 2,...
Linux 程序間通訊之命名管道
1 命名管道 建立命名管道 1 命令列方法 mkfifo filename 2 程式裡建立 int mkfifo const char filename,mode t mode int main 匿名管道與命名管道的區別命名管道的開啟規則命名管道實現檔案拷貝讀原始檔,寫入命名管道 include i...
Ubuntu下Linux程序間通訊 匿名管道
linux程序間通訊 匿名管道 linux程序間通訊 fifo 有名管道 linux程序間通訊 訊息佇列 linux程序間通訊 訊號量 linux程序間通訊 共享記憶體 linux提供了多種程序間通訊的方法,常見有管道 匿名 fifo 有名管道 訊息佇列 訊號量 共享記憶體,socket通訊。1.匿...