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