我正在编写一个应该在VT兼容的数据收集器中运行的控制台应用程序。 在尝试了一些模拟器后,我发现它们有不同的标准行为。
我担心的是大多数模拟器都有本地数据缓冲区,并在按下返回时将其发送到服务器。它允许我编辑输入文本。
此功能对我不利,因为用户可能会弄乱屏幕布局。
什么是禁用本地字符回显的转义码(让服务器发送回去),以及设置终端在不等待RETURN键的情况下立即将数据发送到服务器?
谢谢
答案 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 */