程序間通訊pipe和fifo

2022-08-19 20:33:10 字數 1257 閱讀 1670

具體參考:

//建立有名管道(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...