无法写入通过NFS mouted FIFO文件(Can't write to FIFO fi

2019-07-29 04:59发布

我试图写FIFO文件中找到的NFS挂载和它的块。 可能是什么问题呢?

我的/ etc /出口:

/tmp/test/ 10.0.0.0/24(rw,no_root_squash,async)

NFS服务器和客户端上LS / TMP /测试是相同的

prw--w--w- 1 root root 0 2009-06-24 17:28 ui-input

我正在写为根

谢谢。

Answer 1:

FIFO是意味着是一种进程间的通信机制。 通过尝试导出通过NFS的FIFO,你问内核来处理本地进程间通信更网络通信机制。

有许多与之相关的问题,其中最明显的是,该FIFO读取内核内部实现需要在用户空间将数据复制到缓冲区中。 这种缓冲是不是在NFS直接可用。 因此,内核不支持的FIFO的NFS上的出口。

您可能需要使用网络通信插座代替。



Answer 2:

这种反应可能为时已晚,以帮助您现在,但它是显着的,你可以使用命名管道和“NC”(netcat的)命令达到类似的效果。 netcat的可以接受来自标准输入(或命名管道)输入和回声它通过套接字到的netcat的另一个实例另一台主机上,任选以命名管道。

所以基本上,你的设置是这样的:

Host1$ mkfifo Host1_named_pipe
Host1$ nc -l 1234 > Host1_named_pipe

Host2$ mkfifo Host2_named_pipe
Host2$ nc Host1 1234 < Host2_named_pipe

现在,当你运行在主机2的程序,并且将其输出到Host2_named_pipe,该输出将在主机1来Host1_named_pipe出来。

或者通过ssh:

Host1$ mknode Host1_named_pipe p
Host2$ mknode Host2_named_pipe p

Host1$ cat Host1_named_pipe | ssh Host2 'cat - > Host2_named_pipe'


Answer 3:

它是FIFO命名,但我想这只能当文件系统被安装在系统上。 你对这个FIFO读者? 是作家和在同一系统上的阅读器?

FIFO的工作原理是这样的:当一个进程打开FIFO,内核创建的管道。 如果另一个进程打开FIFO,那么内核知道(从名字),这是相同的管道作为一个曾被打开。

这不能在两个不同的机器上工作。 即,如果处理A运行在客户端1和工序B上运行客户端2,则过程A和过程B不能通过FIFO通信,因为每个机器上创建一个FIFO。

FIFO中不存在被打开,直到它仅在本地退出,它是在文件系统中的内容没有任何影响。



Answer 4:

你有没有在FIFO读者? FIFO的将阻塞,直到有另一端的东西阅读。 (对于在非阻塞模式开口通常的例外情况)。



Answer 5:

NFS被设计成一个多操作系统,最小公分母的文件系统。 因此,它支持完整的Unix文件系统语义。 特别是,FIFO的/命名管道,如果可用在所有,不会跨系统共享。 (在同一台主机上的两个进程可能能够通过NFS FIFO进行沟通,但我不建议这样做)。

如果你想完整的Unix语义,你必须使用像RFS 。 请注意,复杂性和减少RFS的性能,相比NFS的便携性和95%的解决方案,取得了它基本上过时了。 跨主机间通信的推荐解决方案是使用BSD风格的套接字或AT&T风格流,这取决于你的操作系统环境。 对于Linux,使用套接字。



文章来源: Can't write to FIFO file mouted via NFS
标签: linux nfs fifo