有没有办法可以判断stderr是输出到C / C ++程序中的文件还是终端?我需要输出不同的错误消息,具体取决于程序是否被调用为:
./程序
或者喜欢:
./ program 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