VT终端 - 禁用本地编辑和回显

时间:2011-02-10 22:21:53

标签: console ansi vt100

我正在编写一个应该在VT兼容的数据收集器中运行的控制台应用程序。 在尝试了一些模拟器后,我发现它们有不同的标准行为。

我担心的是大多数模拟器都有本地数据缓冲区,并在按下返回时将其发送到服务器。它允许我编辑输入文本。

此功能对我不利,因为用户可能会弄​​乱屏幕布局。

什么是禁用本地字符回显的转义码(让服务器发送回去),以及设置终端在不等待RETURN键的情况下立即将数据发送到服务器?

谢谢

1 个答案:

答案 0 :(得分:4)

本地缓冲数据的功能称为canonization。要禁用它(以及回声),请执行以下操作:

#include <string.h> /* for memcpy() */
#include <termios.h>

struct termios term_stored;
struct termios term_new;
tcgetattr(0,&term_old);
memcpy(&term_new,&term_stored,sizeof(struct termios));
term_new.c_lflag &= ~(ECHO|ICANON); /* disable echo and canonization */
tcsetattr(0,TCSANOW,&term_new);

/* your code */

tcsetattr(0,TCSANOW,&term_stored); /* restore the original state */

或者,请考虑使用libeditncurses或readline。