使用此代码,当我接受输入时,输入不会出现,当我将其注释出来时,此代码在下面执行的是什么,
struct termios origConfig;
tcgetattr(0, &origConfig);
struct termios newConfig = origConfig;
newConfig.c_lflag &= ~(ICANON|ECHO);
newConfig.c_cc[VMIN] = 1;
newConfig.c_cc[VTIME] = 1;
tcsetattr(fileno(stdin), TCSANOW, &newConfig);
答案 0 :(得分:1)
newConfig.c_lflag &= ~(ICANON|ECHO);
将重置echo和规范输入标志。如果您不想重置echo标志(但保留其他所有内容),只需使用:
newConfig.c_lflag &= ~(ICANON);
尽管您可能还想检查规范输入标志的工作原理。例如,请参阅Linux termios man page。
在任何情况下,使用一个不使用另一个可能是不明智的,因为非规范输入的主要用例之一是编辑器之类的东西,其中不希望字符回显。
非caconical输入为您输入每个字符(当您点击 ENTER 时,而不是整行),非常适合编辑。如果您的编辑需要处理像 CTRL-W 这样的内容来向前移动一个单词,那么您可能不希望它在屏幕显示的中间敲打^W
。
相反,您希望它将输出保留到程序,而不是终端接口。非规范的非回声终端I / O可以为您提供更多的功能。
答案 1 :(得分:0)
tcsetattr()
函数控制用户终端的行为。在这种特殊情况下,代码会清除控制结构中的ECHO
标志(newConfig.c_lflag &= ~ECHO
执行此操作),因此用户输入的内容不会被回显。