我正在尝试将控制台应用程序包装到像多路复用器一样的综合环境中。但是我注意到,使用S-Lang库编写的mc
之类的应用程序(午夜指挥官)即使未将stdin
附加到TTY,也能够获得部分键盘状态。
例如,cat /dev/zero|/usr/bin/mc
根本不影响应用程序的可操作性。
我试图了解mc在tmux中是如何工作的,但是我无法在这三个组件(mc,tmux和slang)的代码中找到魔术发生的地方。
问题是如何以编程方式启动mc
之类的应用,以便我可以通过文件描述符与之交互,而实际的stdin根本无法用于该应用?
答案 0 :(得分:1)
他们正在使用 isatty
检查其标准输入是否来自终端,如果没有关闭输入,请重新打开 {{ 1}} 。
除非应用程序采用这种方式采取特殊措施,否则管道输入将丢失。例如,它可以将数据读入缓冲区并对其进行一些有用的操作。