Я использую терминал в необработанном режиме, и проблема в том, что некоторые нажатия клавиш возвращают один int, а другие возвращают два.Например, getchar () для 'A' равен 65, но если пользователь нажимает Alt-D, тогда getchar () возвращает 27 и 100. Функциональные клавиши могут даже возвращать три кода.Например, «F4» генерирует 27 79 83 на моем терминале.Итак, многобайтовые последовательности всегда начинаются с 27, но после этого могут быть один или два символа.
Это проблема, потому что если я перестану читать после одного символа, тогда в буфере останется другой код,поэтому в следующий раз мой цикл ввода снова запустится, затем он прочитает его и получит ошибочное значение.Так, например, в приведенном выше случае, если пользователь нажимает клавишу F4, 83 будет оставлен в буфере и позже будет считан как символ «S».
С другой стороны, если я попытаюсьпрочитайте три символа, тогда цикл ввода будет зависать, если escape-последовательность содержит только два символа, потому что getchar () является блокирующим вызовом.
Мне нужно вызвать getchar (), и если я получу escape (27), тогда мне нужно каким-то образом прочитать все символы, оставшиеся в буфере, а не блокировать при этом.