
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欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)