Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detect in C if outputting to a terminal

Tags:

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?

like image 368
Paul A Jungwirth Avatar asked Jun 30 '09 03:06

Paul A Jungwirth


2 Answers

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 
like image 151
Laurence Gonsalves Avatar answered Sep 30 '22 02:09

Laurence Gonsalves


if (isatty (1))     fprintf (stdout, "Outputting to a terminal."); else     fprintf (stdout, "Not outputting to a terminal."); 
like image 31
dreamlax Avatar answered Sep 30 '22 00:09

dreamlax