Sunday, April 3, 2011

Detect in C if outputting to a terminal

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:

http://stackoverflow.com/questions/911816/detecting-the-output-stream-type-of-a-shell-script

But how do I do it in a C program?

From stackoverflow
  • 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.");
    

0 comments:

Post a Comment