2

我借用了一个简短的 C 代码,它使用子父方案建立 telnet 会话,并通过伪终端设备处理两个进程之间的通信。

代码运行得很好,但有一个主要缺陷,telnet 进程不执行大多数转义序列,而是打印它们(ESC 打印 ^[[, arrows ^[[A ^[[B ^[[C ^[[D, ETC。)。

我现在已经做了很多研究,但我找不到任何好的资源来解释你应该如何处理或传递用户输入,以便最终过程可以适当地解释特殊代码,从而实现真正的交互式会话。

基本代码:http ://dl.dropbox.com/u/15117414/pty.c

4

1 回答 1

1

我解决了这个问题,现在我终于可以分享我的问题的答案了。必须转换为原始模式的文件描述符是父进程的标准输入,而不是伪终端设备的从端:

new_term_settings = slave_orig_term_settings;
cfmakeraw(&new_term_settings);
tcsetattr(0, TCSANOW, &new_term_settings);

这样,父进程将所有未触及的用户输入传递给子进程,子进程已经知道如何处理这些特殊字符并相应地解析它们。

于 2013-02-09T20:03:11.550 回答