因此,我有以下代码,该代码基本上只读取字符用户输入并打印它们,直到输入“ q”为止。
#include
#include
#include
#include
int main(void) {
char c;
static struct termios oldtio, newtio;
tcgetattr(0, &oldtio);
newtio = oldtio;
newtio.c_lflag &= ~ICANON;
newtio.c_lflag &= ~ECHO;
tcsetattr(0, TCSANOW, &newtio);
printf("Give text: ");
fflush(stdout);
while (1) {
read(0, &c, 1);
printf("%c", c);
fflush(stdout);
if (c == 'q') { break; }
}
printf("\n");
tcsetattr(0, TCSANOW, &oldtio);
return 0;
}
在主要功能的开头,我关闭规范模式,以使用户能够在输入时看到自己的输入。我还关闭了回声,例如在按下向上箭头键时不会弹出诸如“ ^ [[A””之类的信息。这行得通,但是我也可以将光标移到终端窗口的上排,这不好。有没有办法解决此问题,使用户只能在当前行内移动?
另一个问题是退格键。当我按下它时,程序将打印一个奇怪的符号(我假设它是0x7f),而不是擦除光标当前位置的剩余字符。我应该以某种方式适当地处理程序中的退格键输出,但是我不知道该怎么办,因为它是这个奇怪的十六进制数。有什么提示吗?
我也一直在考虑使这项工作可行的一种方法是使用规范模式,以便自动使用箭头键和退格功能。但是,规范模式逐行工作,因此直到用户单击“ Enter”后,文本才会出现。到目前为止,我还没有找到让用户在键入时看到其输入的任何方法。这有可能吗?
而且,请不要提出任何疑问或阅读建议。我想使用termios.h做到这一点。