在Telnet会话中处理转义序列

时间:2013-02-05 13:37:38

标签: c networking telnet termios

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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