Question

Is there a way I can tell whether stderr is outputting to a file or the terminal within a C/C++ program? I need to output different error message depending on whether the program is invoked as:

./program

or like:

./program 2>> file

Was it helpful?

Solution

Try using isatty() on the file descriptor:

The isatty() function determines if the file descriptor fd refers to a valid terminal type device.

The function fileno() examines the argument stream and returns its integer descriptor.

Note that stderr is always on file descriptor 2, so you don't really need fileno() in this exact case.

OTHER TIPS

Yes, you can use isatty(3) to tell if a file descriptor refers to the terminal or to something else (file, pipe, etc.). File descriptor 0 is stdin, 1 is stdout, and 2 is stderr.

if(isatty(2))
    // stderr is a terminal
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top