0

我正在尝试打开一个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);
    }

我没有任何问题,当我的文件夹“ls”时,我可以看到标记为黄色的管道

但是当我尝试如下打开管道时,在附加模式下:

    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);
    }

我根本看不到文件夹中的管道。作为记录,我在任何一个选项中都没有收到错误有人知道为什么吗?

谢谢

4

2 回答 2

0

如果多个进程同时将数据附加到一个文件,O_APPEND 可能会导致 NFS 文件系统上的文件损坏。这是因为 NFS 不支持附加到文件,所以客户端内核必须模拟它,这在没有竞争条件的情况下无法完成。

可能是这个原因,更多详情请查看以下链接

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

于 2012-11-06T12:12:43.550 回答
0

这是一个先进先出。除了追加之外,它还能做什么?我相信附加是常态,因此无论你如何打开它,它都会附加。

于 2014-01-22T22:28:03.670 回答