为什么在 WSL2 上禁用回显不起作用?

问题描述 投票:0回答:1

我在 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
tty termios wsl2
1个回答
0
投票

ECHO 是 c_lflag 中的一个位,而不是 c_iflag 中的一个位。

© www.soinside.com 2019 - 2024. All rights reserved.