具體參考:
//建立有名管道(fifo special file),建立完了就像普通檔案一樣open(),再讀寫,成描述符功返回0,失敗返回-1設errno。vs$man 3 mkfifo
#include #include int mkfifo(const char *pathname, mode_t mode);
pathname:the fifo special file's name
mode:the fifo's permissions.
//建立fifo管道檔案
int res=mkfifo(「./a.fifo」,0664);
if(-1==res)
perror("mkfifo"),exit(-1);
res=open(「./a.fifo」,o_rdonly);
if(-1==res)
perror(「open」),exit(-1);
//建立無名管道,相當於直接把open()返回的fd直接放到形參中,而不需額外的變數接收管道檔案的描述符,用於父子程序間通過管道進行ipc通訊,,成功返回0,失敗返回-1設errno
#include int pipe(int pipefd[2]); //**自注釋,表示它需要的引數是乙個有兩個元素的陣列,如果雖然作為形參,實質上和int* pipefd沒有區別
pipefd:return two fds referring to the ends of the pipe.
fork()建立的child也會檔案描述符總表也會複製乙份so,對於child, 應該先關閉讀端, 再寫,對於parent,應該先關閉寫端, 再讀
//使用pipe()實現父子程序的通訊
#include#include#include#include#includeint main()
close(pipefd[1]);//關閉寫端
exit(0);
}//4. 父程序開始啟動,讀取管道中的資料
close(pipefd[1]);
int i=0;
for(i=1;i<=100;i++)
printf("\n");
close(pipefd[0]);
return 0;
}
程序間通訊 管道通訊(pipe與fifo)
1.程序間通訊 ipc interprocess communication 程序間通訊常用的4中方式 2.pipe管道 pipe管道為匿名管道,就是乙個偽檔案,是乙個核心緩衝區,不占用磁碟空間。管道由讀端與寫端組成,分別對應兩個檔案描述符,管道的讀寫預設是阻塞的。管道的內部是由環形佇列構成的,具有...
程序間通訊 fifo
fifo,同時也被稱為有命管道,未命名的管道只能用於有親緣關係之間的程序間的通訊,而命名管道可以實現兩個互不相關之間程序的通訊。在linux下,我們可以通過mkfifo命令建立命名管道,fifo實際上並不占取實際的儲存空間,只是在核心pipe中的乙個鏈結。我們可以通過其大小來檢視。fifo實際結構為...
程序間通訊(FIFO)
一 有名管道 管道沒有名字,因此它們只能用於有乙個公共祖先各個程序之間的通訊,我們無法在無親緣關係的程序之間程序ipc通訊。有名管道即fifo,指先進先出,它是乙個半雙工的資料流,不同於管道的是每乙個fifo有乙個路徑名與之關聯,從而允許無 親緣之間的程序進行通訊。二 建立的函式 fifo由mkfi...