私はCで書かれた非常に単純なTCPサーバーを持っています。それは無期限に実行され、接続を待機します。Windowsではselect
、ソケットでのアクティビティをチェックするために使用します。アクティビティがない場合は、キーボードの「q」を押して終了できるようにする次のコードがあります。
if( kbhit() ) {
char c = getch();
if( c == 'q' ) break;
}
これはunixでは機能しません。これは、kbhit
存在せず、getch
動作が異なるためです。端末設定を変更し、文字ごとの入力を可能にするために使用するサンプルコードをいくつか見つけました。tcsetattr
init関数を呼び出した後、/ dev / stdin(with O_NONBLOCK
)を開いて文字を読み取りますがread( f, &c, 1 )
、文字がヒットするまでブロックします。
別のスレッドを生成して無期限に待機させ、ユーザーが「q」を押した場合に最初のスレッドにシグナルを送ることができると思いますが、それは少し手間がかかるようです。確かにもっと簡単な方法はありますか?