【问题标题】:Redirecting stdin through a FIFO通过 FIFO 重定向标准输入
【发布时间】:2011-06-01 08:26:32
【问题描述】:

我正在 GNU/Linux 下运行一个服务器应用程序(用 Java 编写),它接受输入(我猜来自标准输入)并解释它以运行一些命令。我不想在终端窗口中运行该应用程序(我想运行一个守护程序),但我仍然希望能够随时输入命令。我认为我可以使用 fifos 来做到这一点,所以我使用 mknod 创建了它。问题是 cat fifofile > java...cat fifofile | java ... 由于某种原因,出现“找不到文件”错误。

只使用 cat 读写,fifo 完美运行。

有没有办法解决这个问题,或者有什么其他方法可以达到同样的目标?

【问题讨论】:

    标签: linux shell stdin fifo mknod


    【解决方案1】:

    那么,我的世界?最好的方法是为应用程序的控制台部分提供一个真正的 tty。 screen 是一种简单的方法。

    【讨论】:

    • 哇,没想到有人能从那个描述中认出我的世界 :) 感谢您的回答,我不敢相信我没有考虑过!
    【解决方案2】:

    你试过java < fifofile吗? exec 3<&0; exec 0<fifofile; java 之类的呢?

    你用的是什么外壳?如果您使用支持它们的外壳,您也许可以使用进程替换或协同进程。

    【讨论】:

    • 命名fifo的问题通常是内核匹配一对读写器。如果他启动java < fifo,然后启动echo hello > fifo,那么java 将看到“hello”,然后是EOF。他需要另一个持久的命令来驱动 fifo 的输入端,这让他回到他开始的地方。
    • 那么 cat > fifo 可以解决问题吗?我会尝试,虽然我认为这变得比它应该的更复杂。
    • cat > fifo 可以工作...一次。所以现在你的问题是如何处理持久的cat 而不是java。另外,通过cat 进行的缓冲可能不是您所期望的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    相关资源
    最近更新 更多