我正在尝试打开一个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);
}
我根本看不到文件夹中的管道。 为了记录,我在其中一个选项中收到错误 有谁知道为什么?
由于
答案 0 :(得分:0)
O_APPEND可能会导致NFS文件系统上的文件损坏。这是因为NFS不支持附加到文件,因此客户端内核必须模拟它,如果没有竞争条件就无法完成。
可能是由于这一点,有关详细信息,请查看以下链接
http://www.kernel.org/doc/man-pages/online/pages/man2/open.2.html
答案 1 :(得分:0)
这是一个FIFO。除了追加之外怎么办呢?我认为附加是常态,因此无论你如何打开它都会随时附加。