stonea
stonea

Reputation: 405

How to tell if stderr is directing output to a file?

Is there a way I can tell whether stderr is outputting to a file or the terminal within a C/C++ program? I need to output different error message depending on whether the program is invoked as:

./program

or like:

./program 2>> file

Upvotes: 5

Views: 1353

Answers (2)

winden
winden

Reputation: 2625

Try using isatty() on the file descriptor:

The isatty() function determines if the file descriptor fd refers to a valid terminal type device.

The function fileno() examines the argument stream and returns its integer descriptor.

Note that stderr is always on file descriptor 2, so you don't really need fileno() in this exact case.

Upvotes: 11

Adam Rosenfield
Adam Rosenfield

Reputation: 400642

Yes, you can use isatty(3) to tell if a file descriptor refers to the terminal or to something else (file, pipe, etc.). File descriptor 0 is stdin, 1 is stdout, and 2 is stderr.

if(isatty(2))
    // stderr is a terminal

Upvotes: 10

Related Questions