Well, the subject says it all, basically.
I have a command-line utility that may be used interactively or in scripts, using pipes or i/o redirection. I am using
It is possible to use rdbuf() to change the destination of std::cin and std::cout inside your program. If you don't do that, it is probably quite safe to assume that cin = 0, cout=1 and clog and cerr both = 2 as the C++ standard states that they are synchronized with C stdin, stdout and stderr and those have per POSIX those file descriptors at startup.
If using Linux (and probably other unixes, but definitely not Windows) you could try isatty.
There's no direct way of extracting the file descriptor from the C++ stream. However, since in a C++ program both cout as well as stdout
exist and work at the same time (C++ by default provides synchronisation between stdio and iostream methods), your best bet in my opinion is to do a isatty(fileno(stdout))
.
Make sure you #include <unistd.h>
.