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

sto*_*nea 4 c c++ unix pipe stderr

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

./程序

或者喜欢:

./program 2 >>文件

小智 11

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

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

该函数fileno()检查参数流并返回其整数描述符.

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


Ada*_*eld 10

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

if(isatty(2))
    // stderr is a terminal
Run Code Online (Sandbox Code Playgroud)

  • 它在Windows上不存在(除非您在Cygwin下编译,在这种情况下它是100%可靠的). (3认同)