Linux: перехват Ctrl+C прерывает стандартный вводLinux

Ответить
Anonymous
 Linux: перехват Ctrl+C прерывает стандартный ввод

Сообщение Anonymous »

Я пишу тестовое приложение для библиотеки консольного ввода текста. Идея этой части библиотеки состоит в том, чтобы рассматривать любой ввод как обычный текстовый ввод, даже комбинации 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»