Detect in C if outputting to a terminal
c, linux, macos
Solution
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
Problem
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?