我发现这个答案由 Stack Overflow 上的 @jeremytrimble 解释如何通过网络读取 FIFO 文件。
我想知道是否可以自动启动这些 netcat 命令,例如在 crontab 文件中 (@reboot nc ...)。我如何让它们保持活动状态或在它们被终止后重新启动它们?
Host1$ mkfifo Host1_named_pipe
Host1$ nc -l 1234 > Host1_named_pipe
Host2$ mkfifo Host2_named_pipe
Host2$ nc Host1 1234 < Host2_named_pipe
现在,当您在 Host2 上运行一个程序并将其输出发送到 Host2_named_pipe 时,该输出将从 Host1 上的 Host1_named_pipe 出来。
答案1
在始终连接的服务器上,在 crontab 中使用以下命令:
@reboot nc -k -l 1234 < /tmp/fifo.fifo
在不总是在网络上或开启的客户端上使用此命令:
nc -d $IP_OF_SERVER 1234 > /tmp/fifo.fifo & $SOME_COMMAND
服务器始终监听指定端口上的连接(感谢 -k 参数),客户端只在需要时才连接到服务器。
我将其用于 MPD 及其 FIFO 可视化工具。MPD 在远程主机上运行,但我的 MPD 客户端在本地运行(我使用 ncmpcpp)。
这是本地主机上 ncmpcpp 配置的重要部分:
mpd_host = "$IP_OF_SERVER"
visualizer_fifo_path = "/tmp/fifo.fifo"
这是远程服务器上 mpd 配置的重要部分:
audio_output {
[…]
path "/tmp/fifo.fifo"
[…]
}
在我的本地机器上运行“nc”命令似乎使用了非常大量的资源......大约占了我的 CPU 性能的 100%。