fgets の呼び出しが後でブロックされるかどうかを知るために、C で入力バッファーを覗いたり、同様のトリックを実行したりできるかどうか疑問に思っていました。Java では、BufferedReader.ready() を呼び出すことで、そのようなことを行うことができます。このようにして、次のようなコンソール入力を実装できます。
while (on && in.ready()) {
line = in.readLine();
/* do something with line */
if (!in.ready())
Thread.sleep(100);
}
これにより、外部スレッドは on を false に設定することにより、入力ループを適切にシャットダウンできます。移植性のないトリックに頼らずにCで同様の実装を実行したいのですが、シグナルに頼るか、または(バッファリングの処理を要求しても)再実装することにより、UNIXで「タイムアウトしたfgets」を作成できることはすでに知っていますそれは recv/select の上にありますが、Windows でも動作するものを好むでしょう。
ティア