mkfifo 建立命名管道

2021-08-25 11:55:29 字數 1116 閱讀 1050

mkfifo是乙個建立實名管道的函式

建立命名管道的方法為:mkfifo pipe。

這樣就能建立乙個命名的管道pipe。

表頭檔案

#include

#include

定義函式

int mkfifo(const char * pathname,mode_t mode);

函式說明

mkfifo()會依引數pathname建立特殊的fifo檔案,該檔案必須不存在,而引數mode為該檔案的許可權(mode%~umask),因此 umask值也會影響到fifo檔案的許可權。mkfifo()建立的fifo檔案其他程序都可以用讀寫一般檔案的方式訪問。當使用open()來開啟 fifo檔案時,o_nonblock旗標會有影響

1、當使用o_nonblock 旗標時,開啟fifo 檔案來讀取的操作會立刻返回,但是若還沒有其他程序開啟fifo 檔案來讀取,則寫入的操作會返回enxio 錯誤**。

2、沒有使用o_nonblock 旗標時,開啟fifo 來讀取的操作會等到其他程序開啟fifo檔案來寫入才正常返回。同樣地,開啟fifo檔案來寫入的操作會等到其他程序開啟fifo 檔案來讀取後才正常返回。

返回值若成功則返回0,否則返回-1,錯誤原因存於errno中。

錯誤**

eaccess 引數pathname所指定的目錄路徑無可執行的許可權

eexist 引數pathname所指定的檔案已存在。

enametoolong 引數pathname的路徑名稱太長。

enoent 引數pathname包含的目錄不存在

enospc 檔案系統的剩餘空間不足

enotdir 引數pathname路徑中的目錄存在但卻非真正的目錄。

erofs 引數pathname指定的檔案存在於唯讀檔案系統內。

#include #include #include #include int main(void)

else

return 0;

}

編譯之後測試的結果是:

andrew@andrew-thurley:~/work/filedir$ ./a.out

the message from the pipe is:hello!

mkfifo函式建立有名管道

pipe建立的管道只能在具有共同祖先的程序間通訊,而mkfifo能在不相關的程序間交換資料。通俗舉例來說,乙個在乙個c檔案中通訊,乙個可在多個c檔案中通訊。命名管道開啟的規則 為讀開啟fifo o nonblock disable 阻塞直到有相應程序為寫而開啟fifo o nonblock enab...

無名管道mkfifo 建立fifo1

include include include include include include include int main void int len 0 char buf 100 memset buf,0,sizeof buf 定義從fifo裡面讀的資料的緩衝 int fd open fifo...

《4 建立命名管道》

fifo,也稱為命名管道,它是一種檔案型別。1 特點 1.fifo可以在無關的程序之間交換資料,與無名管道不同。2.fifo有路徑名與之相關聯,它以一種特殊裝置檔案形式存在於檔案系統中。include include intmain include include include intmain i...