我试图写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
我正在写为根
谢谢。
我试图写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
我正在写为根
谢谢。
FIFO是意味着是一种进程间的通信机制。 通过尝试导出通过NFS的FIFO,你问内核来处理本地进程间通信更网络通信机制。
有许多与之相关的问题,其中最明显的是,该FIFO读取内核内部实现需要在用户空间将数据复制到缓冲区中。 这种缓冲是不是在NFS直接可用。 因此,内核不支持的FIFO的NFS上的出口。
您可能需要使用网络通信插座代替。
这种反应可能为时已晚,以帮助您现在,但它是显着的,你可以使用命名管道和“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'
它是FIFO命名,但我想这只能当文件系统被安装在系统上。 你对这个FIFO读者? 是作家和在同一系统上的阅读器?
FIFO的工作原理是这样的:当一个进程打开FIFO,内核创建的管道。 如果另一个进程打开FIFO,那么内核知道(从名字),这是相同的管道作为一个曾被打开。
这不能在两个不同的机器上工作。 即,如果处理A运行在客户端1和工序B上运行客户端2,则过程A和过程B不能通过FIFO通信,因为每个机器上创建一个FIFO。
FIFO中不存在被打开,直到它仅在本地退出,它是在文件系统中的内容没有任何影响。
你有没有在FIFO读者? FIFO的将阻塞,直到有另一端的东西阅读。 (对于在非阻塞模式开口通常的例外情况)。
NFS被设计成一个多操作系统,最小公分母的文件系统。 因此,它不支持完整的Unix文件系统语义。 特别是,FIFO的/命名管道,如果可用在所有,不会跨系统共享。 (在同一台主机上的两个进程可能能够通过NFS FIFO进行沟通,但我不建议这样做)。
如果你想完整的Unix语义,你必须使用像RFS 。 请注意,复杂性和减少RFS的性能,相比NFS的便携性和95%的解决方案,取得了它基本上过时了。 跨主机间通信的推荐解决方案是使用BSD风格的套接字或AT&T风格流,这取决于你的操作系统环境。 对于Linux,使用套接字。