Одна из моих программ использует ncurses для рисования маленького tui. Одна из моих целей - сделать его довольно переносимым для других реализаций проклятий. Это означает, что я хочу поймать SIGWINCH, выпущенный эмулятором терминала, на операцию изменения размера сам и обновить мой tui, чтобы придерживаться измененной геометрии (и не зависит от возможностей изменения размеров ncurses). Поскольку POSIX (насколько мне известно) допускает доступ к переменным sig_atomic_t
в обработчике сигнала, я устанавливаю его в другое состояние. В основном цикле моя программа проверяет, изменилось ли состояние и обновлено ли tui при необходимости.
Но теперь у меня есть проблема, что моя программа зависает в getch
, когда поступает сигнал. В документации по ncurses говорится, что обработанные сигналы никогда не прерывают ее. Это означает, что размер tui не обновляется до нажатия клавиши ввода.
Есть ли какой-либо переносной способ прервать getch
? Мой текущий подход заключается в ungetch
фиктивном ключе в обработчике сигнала, но я не уверен, разрешено ли это. На самом деле я не мог найти никакой документации относительно того, может ли функция проклятия использоваться в обработчике сигнала или нет. Любая идея, как правильно справиться с этим вопросом?
Привет