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...