当我尝试打开一个FIFO O_WRONLY时,我得到一个"没有这样的设备或地址"错误

时间:2014-07-26 16:08:18

标签: c linux fifo

在我的代码中,我创建一个名为" my_fifo"的fifo,如果我在O_WRONLY | O_NONBLOCK模式下打开它,open()返回-1并且错误号为"没有这样的另一方面,如果我在O_RDONLY | O_NONBLOCK模式下打开fifo,则它可以正常工作。为什么会这样?我有什么不对的吗?

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{

    char *fifoname = "my_fifo";
    mkfifo(fifoname, 0666);

    int fd;
    if ((fd = open(fifoname, O_WRONLY | O_NONBLOCK)) == -1)
    {
        perror("open pipe");
        exit(EXIT_FAILURE);
    }

    close(fd);

    exit(EXIT_SUCCESS);
}

1 个答案:

答案 0 :(得分:7)

查看Linux fifo手册页:

  

进程可以在非阻塞模式下打开FIFO。在这种情况下,打开          即使没有人在写入时打开,只读也会成功          另一方面,只写开放将失败 ENXIO (没有这样的设备          或地址)除非另一端已经打开。

如果您想要非阻止模式,您需要确保阅读器在编写者之前打开fifo。