Я пишу тестовое приложение для библиотеки консольного ввода текста. Идея этой части библиотеки состоит в том, чтобы рассматривать любой ввод как обычный текстовый ввод, даже комбинации Ctrl+[буква]. И по большей части это работает довольно хорошо. Но по какой-то причине каждый раз, когда я пробую Ctrl+C, обычный ввод просто перестает работать - я могу продолжать читать ввод посимвольно через getchar и читать, но с обычным стандартным вводом я, кажется, могу снова нажать только Ctrl+C , ничего не происходит, когда я просто пытаюсь печатать как обычно. Однако мне удается использовать std::cin, просто нажимая клавишу возврата.
Я тестировал его на Ubuntu, как WSL в терминале Windows, так и на полной виртуальной машине Ubuntu. .
Вот соответствующая часть моего кода:
termios tOld, tNew;
tcgetattr(STDIN_FILENO, &tOld);
tNew = tOld;
tNew.c_lflag &= ~(ICANON | ISIG | IEXTEN | IXON | ECHO);
tNew.c_iflag &= ~(IXON | IXOFF);
tcsetattr(STDIN_FILENO, TCSANOW, &tNew);
// further processing (reading via read and getchar and 'parsing' the input)
tcsetattr(STDIN_FILENO, TCSANOW, &tOld);
Интересно, что я делаю не так.
Другая возможная причина этой ошибки — этот код, который я использую для обработки нажатия ESC:< /p>
std::function fnWaitForNextKey =
[](unsigned iMillis) -> bool
{
struct timeval tv;
fd_set fds;
tv.tv_sec = 0;
tv.tv_usec = iMillis * 1000;
FD_ZERO(&fds);
FD_SET(STDIN_FILENO, &fds);
return select(STDIN_FILENO + 1, &fds, NULL, NULL, &tv);
};
Подробнее здесь: https://stackoverflow.com/questions/791 ... eaks-stdin