c++ - 以附加模式打开管道

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

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

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

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

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

谢谢

最佳答案

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

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

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

关于c++ - 以附加模式打开管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13250657/

相关文章:

java - 如何运行 jar 文件分配给变量并在 shell 脚本中回显它

python - 使用带有文件描述符的 Python Twisted 的示例

c++ - Q_PROPERTY WRITE 获取索引

c++ - 在 Windows 上以编程方式解压缩 AES 加密的 zip 文件

c++ - 方法中的静态局部变量是一种不好的做法?

linux - 使用libuv处理unix fifos的方法有哪些?

c - 尝试在模拟操作系统内存管理器中显示分配内存的 "map"

c++ - 为什么没有 std::move 就不会调用 move 构造函数?

c++ - Linux 中的内存

linux - 从 TL1 终端退出的 Bash 命令