首页 > 代码库 > FIFO管道探索历程

FIFO管道探索历程

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