無名管道只能由父子程序使用;
但是通過命名管道,不相關的程序也能交換資料。
建立管道mkfifo
開啟管道open
讀管道read
寫管道write
關閉管道close
刪除管道unlink
函式作用:建立有名管道
函式原型:int mkfifo(const char * pathname, mode_t mode);
函式引數:pathname:有名管道的路徑,檔名 mode:屬性(建立時,該檔案必須不存在)
返回值 :成功返回0,出錯:-1
標頭檔案 :#include
#include
函式unlink
函式作用:刪除檔案
函式原型:int unlink(const char * pathname);
函式引數:pathname : 檔案路徑+檔名
返回值 :成功 : 0;出錯:-1
標頭檔案 :
#include
fifo_wr.c
#include
#include
#include
#include
#include
#include
#include
#define fifo_server "/tmp/myfifo"
main(int argc,char** argv)
strcpy(w_buf,argv[1]);
/* 向管道寫入資料 */
nwrite = write(fd,w_buf,100);
if( nwrite== -1)
else
printf("write %s to the fifo\n",w_buf);
}fifo_rd.c
#include
#include
#include
#include
#include
#include
#include
#define fifo "/tmp/myfifo"
main(int argc,char** argv)
while(1)
printf("read %s from fifo\n",buf_r);
sleep(1);
}
pause(); /*暫停,等待訊號*/
unlink(fifo); //刪除檔案
}
fifo檔案在使用上和普通檔案有相似之處,但是也有不有
不同之處:
1. 讀取fifo檔案的程序只能以」rdonly」方式開啟fifo檔案。
2. 寫fifo檔案的程序只能以」wronly」方式開啟fifo
3. fifo檔案裡面的內容被讀取後,就消失了。但是普通檔案裡面的內容讀取後還存在。
程序間通訊 有名管道
無名管道,由於沒有名字,只能用於親緣關係的程序間通訊.為了克服這個缺點,提出了有名管道 fifo fifo不同於無名管道之處在於它提供了乙個路徑名與之關聯,以fifo的檔案形式存在於檔案系統中,這樣,即使與fifo的建立程序不存在親緣關係的程序,只要可以訪問該路徑,就能夠彼此通過fifo相互通訊,因...
程序間通訊 有名管道
mkfifo test 這條命令建立了乙個名字為 test 的命名管道。接下來我們用乙個程序向這個管道裡面寫資料,然後有另外乙個程序把裡面的資料讀出來。echo this is a pipe test 寫資料 這個時候管道的內容沒有被讀出的話,那麼這個命令就會一直停在這裡,只有當另外乙個程序把 te...
程序通訊之有名管道
程序通訊之有名管道 一 前言 我們前面部落格講過,父子程序之間,對於檔案操作的檔案操作符是共享的,而對於程序的全域性資料,堆區資料,棧區資料是不共享的,那麼程序之間到底是怎麼進行資訊的傳遞的呢,具體的實現,以及傳遞的過程是怎麼完成的呢,前面我們講過訊號在程序之間的使用,那也是一種程序之間資訊的傳遞。...