Не удается отключить экранирование, даже если эхо отключено

Я пытаюсь сделать более похожее приложение, где вводимые пользователем данные записываются, но не печатаются. Поэтому я отключил эхо и отключил канонический режим для немедленной обработки входных данных.

Вот код для этого:

        struct termios oflags, nflags;
    tcgetattr(fileno(stdin), &oflags);
    nflags = oflags;
    nflags.c_lflag &= ~ECHO;
    nflags.c_lflag |= ECHONL;
    nflags.c_lflag &= ~(ICANON);
    nflags.c_cc[VKILL] = 0;  /* <Nada> */

    if (tcsetattr(fileno(stdin), TCSANOW, &nflags) != 0) {
        exit(0);
    }

А затем прочитать вход и сделать вещи:

while(1){
    c = getchar();

И тогда я обрабатываю C в качестве контроля в принципе.

Так что это работает по большей части. За исключением случаев, когда я нажимаю клавишу ввода, хотя обработка работает, как ожидалось, ввод по-прежнему отправляется / очищается И я получаю маленькие квадратные скобки вокруг последней строки.

Любая помощь будет оценена. Спасибо!

РЕШЕНИЕ: удаление 'nflags.c_lflag |= ECHONL;' исправил, я добавил это по другой причине.

1 ответ

Удаление 'nflags.c_lflag |= ECHONL;' исправил, я добавил это по другой причине, но я тоже могу обойтись.

Другие вопросы по тегам