代码之家  ›  专栏  ›  技术社区  ›  Grief

终端复用器如何欺骗基于S语言的控制台应用程序的键盘输入?

  •  0
  • Grief  · 技术社区  · 7 年前

    我正在尝试将控制台应用程序包装到一个合成环境中,就像多路复用器一样。但我注意到应用程序 mc (午夜指挥官)使用S-lang库编写,即使其 stdin 未附加到tty。 例如, cat /dev/zero|/usr/bin/mc 完全不影响应用程序的可操作性。

    我试图理解mc在tmux中是如何工作的,但是我无法在这三个组件(mc、tmux和slang)的代码中找到魔法发生的地方。

    问题是我如何以编程方式启动类似 MC 这样我就可以通过文件描述符与之交互,而实际的stdin对该应用程序根本不可用?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Thomas Dickey    7 年前

    他们正在检查 标准输入 来自终端,使用 isatty ,如果不关闭输入,则重新打开 /dev/tty .

    除非应用程序以这种方式执行特殊操作,否则管道输入将丢失。例如,它可以将数据读取到缓冲区中,并对其进行一些有用的操作。