stderr が C/C++ プログラム内のファイルまたは端末に出力しているかどうかを確認する方法はありますか? プログラムが次のように呼び出されるかどうかに応じて、異なるエラー メッセージを出力する必要があります。
。/プログラム
または好き:
./プログラム 2>> ファイル
isatty()ファイル記述子で使用してみてください:
この
isatty()関数は、ファイル記述子fdが有効な端末タイプのデバイスを参照しているかどうかを判別します。関数
fileno()は引数ストリームを調べ、その整数記述子を返します。
は常にファイル記述子 2 にあることに注意してください。したがって、この正確なケースでは実際にstderrは必要ありません。fileno()
はい、isatty(3)ファイル記述子が端末を参照しているか、他の何か (ファイル、パイプなど) を参照しているかを確認するために使用できます。ファイル記述子 0 はstdin、1 はstdout、2 はstderrです。
if(isatty(2))
// stderr is a terminal