5

stderr が C/C++ プログラム内のファイルまたは端末に出力しているかどうかを確認する方法はありますか? プログラムが次のように呼び出されるかどうかに応じて、異なるエラー メッセージを出力する必要があります。

。/プログラム

または好き:

./プログラム 2>> ファイル

4

2 に答える 2

11

isatty()ファイル記述子で使用してみてください:

このisatty()関数は、ファイル記述子fdが有効な端末タイプのデバイスを参照しているかどうかを判別します。

関数fileno()は引数ストリームを調べ、その整数記述子を返します。

は常にファイル記述子 2 にあることに注意してください。したがって、この正確なケースでは実際にstderrは必要ありません。fileno()

于 2009-05-18T21:40:14.567 に答える
10

はい、isatty(3)ファイル記述子が端末を参照しているか、他の何か (ファイル、パイプなど) を参照しているかを確認するために使用できます。ファイル記述子 0 はstdin、1 はstdout、2 はstderrです。

if(isatty(2))
    // stderr is a terminal
于 2009-05-18T21:38:42.293 に答える