如何判断stderr是否将输出定向到文件?

时间:2009-05-18 21:36:49

标签: c++ c unix pipe stderr

有没有办法可以判断stderr是输出到C / C ++程序中的文件还是终端?我需要输出不同的错误消息,具体取决于程序是否被调用为:

./程序

或者喜欢:

./ program 2>>文件

2 个答案:

答案 0 :(得分:11)

尝试在文件描述符上使用isatty()

  

isatty()函数确定是否   文件描述符fd是指a   有效的终端类型设备。

     

函数fileno()检查了   参数流并返回它   整数描述符。

请注意,stderr始终位于文件描述符2上,因此在这种情况下您并不需要fileno()

答案 1 :(得分:10)

是的,您可以使用isatty(3)来判断文件描述符是指终端还是其他内容(文件,管道等)。文件描述符0为stdin,1为stdout,2为stderr

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