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
Try using isatty()
on the file descriptor:
The
isatty()
function determines if the file descriptorfd
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With