Determine whether process output is being redirected in C/C++ Determine whether process output is being redirected in C/C++ shell shell

Determine whether process output is being redirected in C/C++


You can use isatty on linux. This function is obviously not standard C, since - for example - on many platforms you can't redirect the output to a file.


Have a look at this code:

int is_redirected(){   if (!isatty(fileno(stdout))){       fprintf(stdout, "argv, argc, someone is redirecting me elsewhere...\n");       return 1;   }   return 0;}/* ... */int main(int argc, char **argv){    if (is_redirected()) exit(-1);    /* ... */}

That function will return 1 if the program is being redirected. Notice in the main(...) how it is called. If the program was to run and is being redirected to stderr or to a file the program exits immediately.


In (non-standard) C, you can use isatty(). In perl, it is done with the -t operator:

$ perl -E 'say -t STDOUT'1$ perl -E 'say -t STDOUT' | cat$

In the shell you can use test:

$ test -t 1 && echo is a ttyis a tty$ (test -t 1 && echo is a tty ) |  cat$