FIFO管道的创建FIFO
创建一个FIFO文件类似于创建文件,FIFO文件就像普通文件一样,也是可以经过路径名来访问的。相应文件stat结构的域st_mode的编码指明了文件是否是FIFO类型。FIFO管道通过函数mkfifo创建,函数原型如下:
#include <sys/stat.h>
#include <sys/types.h>
int mkfifo( const char * filename, mode_t mode );
mkfifo函数中参数mode指定FIFO的读写权限,新创建FIFO的用户ID和组ID规则域open函数相同。参数filename指定新创建FIFO的文件名称。函数如果成功返回0,出 错返回–1,并更改errno的值。errno有可能出现的值为:EACCESS、EEXIST、ENAMETOO- LONG、ENOENT、ENOSPE、ENOTDIR和EROFS。
下面实例演示了如何使用mkfifo函数来创建一个FIFO。程序中从程序的命令行参数中得到一个文件名,然后使用mkfifo函数创建FIFO文件。新创建的FIFO只具有读写权限。由于FIFO文件的特性,所以它被隐性地规定不具有执行权限。
程序清单14-5 create_fifo.c 使用mkfifo函数创建FIFO管道
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[] )
{
mode_t mode = 0666; /*新创建的FIFO模式*/
if ( argc != 2 ){
/*向用户提示程序使用帮助*/
printf(USEMSG: create_fifo {fifoname}\n);
exit (1);
}
/* 使用mkfifo函数创建一个FIFO管道*/
if ( ( mkfifo (argv[1], mode )) < 0) {
perror ( failed to mkfifo );
exit ( 1 );
}
else
printf (you successfully create a FIFO name is : %s\n, argv[1]);
/* 输出FIFO文件的名称 */
exit (0);
}
(2)在shell中编译该程序如下:
$gcc create_fifo.c–o create_fifo
(3)在shell中运行该程序如下:
$./ create_fifo
USEMSG: create_fifo {fifoname}
输入正确的命令符。
$./ create_fifo fifo1
you successfully create a FIFO name is :fifo1
$./ create_fifo fifo1
mkfifo: File exists
上述程序使用mkfifo函数创建一个FIFO,名字是基于用户的输入文件名,可以看到当要创建一个已经存在的FIFO时,程序会产生一个EEXIST的异常,相对应该异常,perror函数打印了相应的帮助信息为mkfifo: File exists。
2024-10-28 广告