Не удается отключить экранирование, даже если эхо отключено
Я пытаюсь сделать более похожее приложение, где вводимые пользователем данные записываются, но не печатаются. Поэтому я отключил эхо и отключил канонический режим для немедленной обработки входных данных.
Вот код для этого:
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;' исправил, я добавил это по другой причине, но я тоже могу обойтись.