创建一个在读取时执行命令的命名管道/fifo

Pau*_*len 2 fifo

我希望提供一个进程,该进程仅从包含来自 http URL 的内容的本地文件中读取。该进程是一个守护进程,它被硬编码以读取当前工作目录中的特定文件,并在发生特定事件时读取它。

我无法控制触发文件读取的事件,我想提供近乎实时的数据,而不是通过 curl 脚本不断将数据转储到文件中。

我认为可能有用的是一个fifo,它在读取时执行命令。然后将其连接到 netcat 或 curl 以检索 URL 的内容(xml 数据)。这可能吗?

Gil*_*il' 5

不可能从管道读取启动一个普通文件系统上的进程。但是还有其他方法可以满足您的需求。

您可以循环运行内容生成程序。每次打开 FIFO 进行写入时,这将阻塞,直到读取器出现。

while true; do
  generate-content >fifo
done
Run Code Online (Sandbox Code Playgroud)

另一种方法是制作一个FUSE文件系统,它可以生成你喜欢的任何内容——返回给阅读器的数据是由文件系统驱动程序生成的,这是一个普通的程序,所以你可以让它做任何你喜欢的事情。但是,构建 FUSE 文件系统驱动程序需要大量工作,因此除非您找到一个已经完全满足您需要的驱动程序,否则这可能是过大的。一些可能对您有帮助的文件系统是:

  • ScriptFS — 从描述来看,这正是您所需要的:“复制本地文件系统,但根据执行结果替换所有检测为‘脚本’的文件”。我从来没有用过它。
  • HTTPFS——读取文件触发网络下载;将其连接到 localhost 并运行一个小型网络服务器,例如支持 CGI 或类似方法来提供动态内容的lighttpdthttpd。如果您需要的数据已经从网络服务器下载,只需将 HTTPFS 指向它。