私のプログラムの 1 つは、小さな tui を描画するために ncurses を使用しています。私の目標の 1 つは、他の curses 実装にかなり移植できるようにすることです。これは、サイズ変更操作で端末エミュレーターによって発行された SIGWINCH を自分でキャッチし、tui を更新して、変更されたジオメトリを順守する (ncurses のサイズ変更機能に依存しない) ことを意味します。POSIX (私が知る限り) ではsig_atomic_t、シグナル ハンドラー内の変数へのアクセスしか許可されていないため、シグナル ハンドラーを別の状態に設定しました。メイン ループで、プログラムは状態が変化したかどうかを確認し、必要に応じて tui を更新します。
しかし今、getchシグナルが到着したときにプログラムがハングアップするという問題があります。ncurses のドキュメントには、処理されたシグナルが決して中断しないと記載されています。これは、入力キーが押されるまで、tui のサイズが更新されないことを意味します。
中断するポータブルな方法はありますgetchか? 私の現在のアプローチはungetch、シグナルハンドラーのダミーキーですが、これが許可されているかどうかはわかりません。実際、シグナルハンドラでcurses関数を使用できるかどうかに関するドキュメントは見つかりませんでした。この問題を正しく処理する方法はありますか?
よろしく