我正在尝试写入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身份写作的
谢谢.
FIFO意味着进程间通信机制.通过尝试通过NFS导出FIFO,您要求内核将本地进程间通信视为更多的网络通信机制.
存在许多与此相关的问题,最明显的一个问题是内核中的FIFO读取实现期望用户空间中的缓冲区将数据复制到.NFS中不能直接使用这样的缓冲区.因此,内核不支持通过NFS导出FIFO.
您可能希望使用套接字进行网络通信.
这个响应可能为时已晚,无法帮助您,但值得注意的是,您可以使用命名管道和"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)
它是一个名为fifo的,但我猜它只适用于安装文件系统的系统.你有这个fifo的读者吗?作者和读者是否在同一个系统上?
fifo的工作方式如下:当进程打开fifo时,内核会创建管道.如果另一个进程打开fifo,那么内核知道(从名称)它是与先前打开的管道相同的管道.
这不适用于两台不同的机器.即如果进程A在client1上运行而进程B在client2上运行,则进程A和进程B无法通过fifo进行通信,因为在每台机器上创建了一个fifo.
fifo在打开之前不存在,并且它只在本地退出,它对文件系统的内容没有影响.
| 归档时间: |
|
| 查看次数: |
6714 次 |
| 最近记录: |