1

プログラムは、標準入力がキーボード入力から来ているのか、ファイルからリダイレクトされているのかを検出できますか? cで?

4

1 に答える 1

7

はい、ほとんどのシステムで。POSIX システム (Linux、Mac OS X、BSD など) では、isatty(3)ファイル記述子 0 (標準入力) で関数を使用できます。Windows では、 を使用できます_isatty。例えば:

if(isatty(0))
{
    // standard input is a terminal device
}

多くのプログラムではisatty、出力バッファリングの動作を変更するために使用されていることに注意してください。標準出力が端末の場合、出力は行バッファリングされます (たとえば、すべての改行が出力された後にフラッシュされます)。一方、標準出力が端末でない場合は、完全にバッファリングされます (たとえば、バッファがいっぱいになった場合、プロセスが正常に終了した場合、またはストリームがアプリケーションによって明示的にフラッシュされた場合にのみフラッシュされます)。

于 2012-05-22T18:57:15.333 に答える