码迷,mamicode.com
首页 > 其他好文 > 详细

FIFO管道探索历程

时间:2014-09-08 10:59:37      阅读:499      评论:0      收藏:0      [点我收藏+]

标签:管道

  1. 刚开始代码的实现如下:

    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管道探索历程

标签:管道

原文地址:http://5228690.blog.51cto.com/5218690/1549836

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!