linux中 mkfifo干什么的

linux中 mkfifo干什么的,第1张

相关函数

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

}

mkfifo是创建一个fifo文件,0666是创建的该文件的权限。文件的权限:r 表示可读取,w 表示可写入,x 表示可执行,分别表示为数字为r=4,w=2,x=1;权限又按用户的不同分为三类:User、Group、及Other三类用户的权限。如,对于User用户,若拥有rw权限,则为4+2=6,所以0666中的666代表User、Group、及Other的权限分别是6,6,6,即均为rw权限。而0666中的0代表不设置特殊的用户id,此处还可设为4,2,1,4代表具有root权限(即suid),2代表sgid,1代表sticky


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8308300.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-15
下一篇2023-04-15

发表评论

登录后才能评论

评论列表(0条)

    保存