我正在借用一个使用子父方案建立telnet会话的简短C代码,并通过伪终端设备处理两个进程之间的通信。
代码运行得非常好但有一个主要缺陷,telnet进程不执行大多数转义序列,而是打印它们(ESC打印^ [[,箭头^ [[A ^ [[B ^ [[C ^ [ [D等等。)
我现在已经做了很多研究,但是我找不到任何好的资源来解释你应该如何对待或传递用户输入,以便最终过程能够恰当地解释特殊代码,从而实现真正的交互式会话
答案 0 :(得分:1)
我解决了问题,现在我终于能够分享我的问题的答案了。 必须转为原始模式的文件描述符是父进程的标准输入,而不是伪终端设备的从端:
new_term_settings = slave_orig_term_settings;
cfmakeraw(&new_term_settings);
tcsetattr(0, TCSANOW, &new_term_settings);
这样父进程就会将所有用户输入传递给子进程,该进程已经知道如何处理这些特殊字符并相应地解析它们。