I'm writing a C program for OS X and Linux, and I want to tweak the output based on whether or not it's going to a terminal. I know we've covered how to do this in a shell script, e.g. here:
Detecting the output stream type of a shell script
But how do I do it in a C program?
Use isatty()
:
$ man isatty ISATTY(3) Linux Programmer's Manual ISATTY(3) NAME isatty - does this descriptor refer to a terminal SYNOPSIS #include <unistd.h> int isatty(int desc); DESCRIPTION returns 1 if desc is an open file descriptor connected to a terminal and 0 otherwise.
Since stdout
is always file descriptor 1, you can do:
if(isatty(1)) // stdout is a terminal
if (isatty (1)) fprintf (stdout, "Outputting to a terminal."); else fprintf (stdout, "Not outputting to 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