程序通訊 有名管道

2021-07-24 00:24:52 字數 1554 閱讀 6207

無名管道只能由父子程序使用;

但是通過命名管道,不相關的程序也能交換資料。

建立管道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...

程序通訊之有名管道

程序通訊之有名管道 一 前言 我們前面部落格講過,父子程序之間,對於檔案操作的檔案操作符是共享的,而對於程序的全域性資料,堆區資料,棧區資料是不共享的,那麼程序之間到底是怎麼進行資訊的傳遞的呢,具體的實現,以及傳遞的過程是怎麼完成的呢,前面我們講過訊號在程序之間的使用,那也是一種程序之間資訊的傳遞。...