-
mkfifo
鎖定
mkfifo是一個建立實名管道的函數。
- 外文名
- mkfifo
- 類 型
- 函數名稱
- 用 途
- 建立實名管道
- 學 科
- 計算機編程
mkfifo函數使用
[code]mkfifo(建立實名管道)
相關函數
pipe,popen,open,umask
表頭文件
#include<sys/types.h>
#include<sys/stat.h>
定義函數
int mkfifo(const char * pathname,mode_t mode);
mkfifo函數説明
mkfifo ()會依參數pathname建立特殊的FIFO文件,該文件必須不存在,而參數mode為該文件的權限(mode%~umask),因此 umask值也會影響到FIFO文件的權限。Mkfifo()建立的FIFO文件其他進程都可以用讀寫一般文件的方式存取。當使用open()來打開 FIFO文件時,O_NONBLOCK非阻塞標誌的使用與否會有影響
1、當使用O_NONBLOCK 旗標時,打開FIFO 文件來讀取的操作會立刻返回,但是若還沒有其他進程打開FIFO 文件來讀取,則寫入的操作會出錯返回errno,出錯號為ENXIO 。
2、沒有使用O_NONBLOCK 旗標時,打開FIFO 來讀取的操作會等到其他進程打開FIFO文件來寫入才正常返回。同樣地,打開FIFO文件來寫入的操作會等到其他進程打開FIFO 文件來讀取後才正常返回。
返回值
若成功則返回0,否則返回-1,錯誤原因存於errno中。
錯誤代碼
EACCESS 參數pathname所指定的目錄路徑無可執行的權限
EEXIST 參數pathname所指定的文件已存在。
ENAMETOOLONG 參數pathname的路徑名稱太長。
ENOENT 參數pathname包含的目錄不存在
ENOSPC 文件系統的剩餘空間不足
ENOTDIR 參數pathname路徑中的目錄存在但卻非真正的目錄。
EROFS 參數pathname指定的文件存在於只讀文件系統內。
mkfifo示例1
#include<sys/types.h> #include<sys/stat.h> #include<unistd.h> #include<fcntl.h> int main(void) { char buf[80]; int fd; unlink( "zieckey_fifo" ); mkfifo( "zieckey_fifo", 0777 ); if ( fork() > 0 ) { char s[] = "Hello!\n"; fd = open( "zieckey_fifo", O_WRONLY ); write( fd, s, sizeof(s) ); //close( fd ); } else { fd = open( "zieckey_fifo", O_RDONLY ); read( fd, buf, sizeof(buf) ); printf("The message from the pipe is:%s\n", buf ); //close( fd ); } return 0; } 執行 The message from the pipe is:Hello!
mkfifo示例2
#include<sys/types.h> #include<sys/stat.h> #include<unistd.h> #include<fcntl.h> #include<stdio.h> int main( int argc, char **argv ) { mode_t mode = 0666; if ( argc !=2 ) { printf( "Usage:[%s] fifo_filename\n", argv[0] ); return -1; } if (mkfifo( argv[1], mode)<0 ) { perror( "mkfifo"); return -1; } return 0; } [/code]
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:15次歷史版本
- 最近更新: JD萤火虫003