Я пишу тестовое приложение для библиотеки консольного ввода текста. Идея этой части библиотеки состоит в том, чтобы рассматривать любой ввод как обычный текстовый ввод, даже комбинации 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
Linux: перехват Ctrl+C прерывает стандартный ввод ⇐ Linux
-
Anonymous
1729933956
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);
};
Подробнее здесь: [url]https://stackoverflow.com/questions/79127560/linux-catching-ctrlc-breaks-stdin[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия