私はこのCコードに出くわしました。freopen を使用して、バイナリ モードで stdin を再度開きます。
if (!isatty(STDIN_FILENO))
freopen(NULL, "rb", stdin);
isattyテストがどこから来たのかわかりません。ターミナルを再度開いても意味がないということですか?
isatty テストを省略して、
freopen(NULL, "rb", stdin);
isatty()
関数はPOSIX標準です。
バイナリモードで(シェル入力リダイレクトを介して)読み取られているファイルを確実に処理したい場合は、これを行うのが理にかなっていると思います。