我在 WSL2 Ubuntu 上编译并运行下面的 C 程序,它应该关闭标准输入上的回显,让用户键入一行文本,向他们显示他们键入的内容,然后重新打开回显。 但终端有回声。 可能出了什么问题?
#include <stdio.h>
#include <unistd.h>
#include <termios.h>
int main(int argc, void **argv) {
struct termios term;
char input[256];
if(tcgetattr(STDIN_FILENO, &term) < 0) {
perror("tcgetattr");
return 1;
}
printf("term.c_iflag: %x\n", term.c_iflag);
term.c_iflag &= ~ECHO;
if(tcsetattr(STDIN_FILENO, TCSANOW, &term) < 0) {
perror("tcsetattr");
return 1;
}
printf("Echo mode disabled.\n");
printf("term.c_iflag: %x\n", term.c_iflag);
fgets(input, sizeof(input), stdin);
printf("Entered: %s\n", input);
term.c_iflag |= ECHO;
if(tcsetattr(STDIN_FILENO, TCSANOW, &term) < 0) {
perror("tcsetattr");
return 1;
}
printf("term.c_iflag: %x\n", term.c_iflag);
return 0;
}
输出是这样的,并且回显没有关闭。
term.c_iflag: 50a
Echo mode disabled.
term.c_iflag: 502
this should not be visible
Entered: this should not be visible
term.c_iflag: 50a
ECHO 是 c_lflag 中的一个位,而不是 c_iflag 中的一个位。