2015-09-17 50 views
1

我创建了一个虚拟文件系统,将其输出显示为只读命名管道(即S_IFIFO)。将数据写入到FUSE命名管道

至于getattr而言,我的主机显示权限模式设置正确。但是,当我尝试打开管道(例如,cat my_fuse_mount/my_pipe)时,显然是这样但没有数据流。

我期待open-read-release序列做必要的打开和推送数据到命名管道,但显然不是。当我运行在调试模式下时,FUSE的日志似乎并不表示它正在尝试做任何事情。

使用什么FUSE操作将数据推送到命名管道?

+0

尝试附加一个调试器并查看进程停止的位置。我不知道命名管道在FUSE文件系统上的工作方式,但通常在Linux上打开管道时,打开的呼叫会阻塞,直到另一个进程打开管道的另一端。然后! –

回答

1

FUSE可以创建诸如命名管道之类的特殊文件,但其读写操作仅适用于普通文件。如果你想实现一个管道,你需要像CUSE这样的东西。

+0

...回到绘图板! – Xophmeister

+0

那么,你可以选择使一个普通的用户空间应用程序打开管道并写入它。你甚至可以从你的熔丝文件系统中得到可执行文件,尽管这可能会有点复杂。 –

+0

我的用例试图通过强制通过命名管道的输出(因此零大小和不寻求)来解决[“知道事先文件大小”限制](http://stackoverflow.com/a/31940722)和,一旦它被读完,文件就可以成为一个具有正确属性的常规文件......不过,谢谢你;知道:)是有用的 – Xophmeister