5

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

。/程序

或喜欢:

./程序 2>> 文件

4

2 回答 2

11

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

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

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

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

于 2009-05-18T21:40:14.567 回答
10

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

if(isatty(2))
    // stderr is a terminal
于 2009-05-18T21:38:42.293 回答