无法写入通过NFS mowted的FIFO文件

jac*_*hab 8 linux nfs fifo

我正在尝试写入NFS文件上的FIFO文件,并阻止它.可能是什么问题呢?

我的/ etc/export:

/tmp/test/ 10.0.0.0/24(rw,no_root_squash,async)
Run Code Online (Sandbox Code Playgroud)

NFS服务器和客户端上的ls/tmp/test是一样的

prw--w--w- 1 root root 0 2009-06-24 17:28 ui-input
Run Code Online (Sandbox Code Playgroud)

而我是以root身份写作的

谢谢.

Div*_*oor 7

FIFO意味着进程间通信机制.通过尝试通过NFS导出FIFO,您要求内核将本地进程间通信视为更多的网络通信机制.

存在许多与此相关的问题,最明显的一个问题是内核中的FIFO读取实现期望用户空间中的缓冲区将数据复制到.NFS中不能直接使用这样的缓冲区.因此,内核不支持通过NFS导出FIFO.

您可能希望使用套接字进行网络通信.


jer*_*ble 6

这个响应可能为时已晚,无法帮助您,但值得注意的是,您可以使用命名管道和"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
Run Code Online (Sandbox Code Playgroud)

现在,当您在Host2上运行程序并将其输出发送到Host2_named_pipe时,该输出将来自Host1上的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'
Run Code Online (Sandbox Code Playgroud)


sho*_*nex 5

它是一个名为fifo的,但我猜它只适用于安装文件系统的系统.你有这个fifo的读者吗?作者和读者是否在同一个系统上?

fifo的工作方式如下:当进程打开fifo时,内核会创建管道.如果另一个进程打开fifo,那么内核知道(从名称)它是与先前打开的管道相同的管道.

这不适用于两台不同的机器.即如果进程A在client1上运行而进程B在client2上运行,则进程A和进程B无法通过fifo进行通信,因为在每台机器上创建了一个fifo.

fifo在打开之前不存在,并且它只在本地退出,它对文件系统的内容没有影响.