當前位置:編程學習大全網 - 編程語言 - python編程中 os.mkfifo()和os.mknod()函數具體用法?最好有例子,裏面參數具體怎麽配置就能創建管道或節

python編程中 os.mkfifo()和os.mknod()函數具體用法?最好有例子,裏面參數具體怎麽配置就能創建管道或節

mkfifo函數使用

[code]mkfifo(建立實名管道)

相關函數

pipe,popen,open,umask

表頭文件

#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指定的文件存在於只讀文件系統內。

示例1:

#include

#include

#include

#include

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;

}

執行

hello!

示例2:

#include

#include

#include

#include

#include

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]

  • 上一篇:逃出夢中的別墅 破題
  • 下一篇:關於魯迅
  • copyright 2024編程學習大全網