2009-05-18 63 views
4

有沒有一種方法可以判斷stderr是否輸出到C/C++程序中的文件或終端?我需要輸出不同的錯誤消息,這取決於程序是否被調用爲:如何判斷stderr是否將輸出指向文件?

./program

或類似:

./program 2 >>文件

+1

感謝您的快速回復。我不知道該如何谷歌找到這個答案,但Stackoverflow FTW。 – stonea 2009-05-18 21:44:43

回答

11

嘗試在文件描述符使用isatty()

isatty()函數確定 文件描述符fd指 有效的終端類型的裝置。

函數fileno()檢查參數流 ,並返回其整數描述符 。

注意stderr總是在文件描述符2,所以你並不真正需要fileno()在這種情況下,準確。

10

是的,你可以使用isatty(3)來判斷一個文件描述符是指終端還是別的東西(文件,管道等)。文件描述符0是stdin,1是stdout,並且2是stderr

if(isatty(2)) 
    // stderr is a terminal 
+0

在Windows上有多可靠? – JesperE 2009-05-18 21:40:26

相關問題