以追加模式打开管道

时间:2012-11-06 12:03:56

标签: c++ linux mkfifo

我正在尝试打开一个fifo管道,一个线程写入,同步一切都很好。 但是,出于可以理解的原因,我需要在追加模式下打开它。

当我打开它时如下:

        ret_val = mkfifo(lpipename.c_str(), 0666);
        if((pipehandler = open(lpipename.c_str(), O_RDWR)) < 1) 
    {
        perror("Failed to open pipe file");
        syslog(LOG_ERR, "Failed to open pipe file");
        exit(1);
    }

我没有任何问题,当我在我的文件夹中时,我可以看到标有黄色的管道

但是当我尝试按照以下方式打开管道时,在追加模式中:

    ret_val = mkfifo(lpipename.c_str(), 0666);
    if((pipehandler = open(lpipename.c_str(), O_RDWR| O_APPEND)) < 1) 
    {
        perror("Failed to open pipe file");
        syslog(LOG_ERR, "Failed to open pipe file");
        exit(1);
    }

我根本看不到文件夹中的管道。 为了记录,我在其中一个选项中收到错误 有谁知道为什么?

由于

2 个答案:

答案 0 :(得分:0)

如果多个进程一次将数据附加到文件,则

O_APPEND可能会导致NFS文件系统上的文件损坏。这是因为NFS不支持附加到文件,因此客户端内核必须模拟它,如果没有竞争条件就无法完成。

可能是由于这一点,有关详细信息,请查看以下链接

http://www.kernel.org/doc/man-pages/online/pages/man2/open.2.html

答案 1 :(得分:0)

这是一个FIFO。除了追加之外怎么办呢?我认为附加是常态,因此无论你如何打开它都会随时附加。