首页 > 代码库 > FIFO管道探索历程
FIFO管道探索历程
刚开始代码的实现如下:
void CreateFIFO()
{
if((mkfifo(FIFOPATH,O_CREAT|O_EXCL|O_RDWR)<0)&&(errno!=EEXIST))
{
printf(strerror(errno));
}
}int OpenFIFO()
{
fd=open(FIFOPATH,O_RDWR|O_NONBLOCK);
return fd;
}
觉得非常的不优雅,毕竟需要调用两个函数,而且写函数又有一个调用write
2现在使用正确的指导:
//mkfifo函数已经隐含指定O_CREAT|O_EXCL,也就是说,它要么创建一个新的FIFO,要么
//返回一个EEXIST错误(如果所指定名字的FIFO已经存在)。如果不希望创建一个新的FIFO
//那么就改调用open而不是mkfifo,要打开一个已存在的FIFO或者创建一个新的FIFO,应
//先调用mkfifo,在检查它是否返回EEXIST,若返回该错误改为调用open
//mkfifo命令也能创建FIFO,可以从SHELL脚本或命令行中使用它
int OpenFIFO(const char* pszFIFOPath)
{
int fd=-1;
if((mkfifo(pszFIFOPath,O_CREAT|O_EXCL|O_RDWR)<0)&&(errno!=EEXIST))
{
printf(strerror(errno));
}
fd=open(pszFIFOPath,O_RDWR|O_NONBLOCK);
return fd;
}
FIFO管道探索历程