By default certain programs format their output according to the type of the stream they write to. For example, the output of ls
and ls > file
looks differently. I'd like to know how this is achieved by a program. Additionally, is there a way by which we can trick such programs as if the output stream is a terminal where it actually is a file (especially when they don't have any options that affect output formatting)?
views:
23answers:
2
+1
A:
Via isatty
:
if (!isatty(fileno(stdout))
{
// redirected to a file or piped to a process
}
One way to trick is instead of doing redirect, start script
. Now everything that goes to the 'tty' (including what you type into stdin and what is sent to output) is sent to a file called typescript.
R Samuel Klatchko
2010-05-20 06:31:48
Better check stdout, not stdin.
ThiefMaster
2010-05-20 06:32:59
@ThiefMaster - thanks for the heads up. Fixed.
R Samuel Klatchko
2010-05-20 06:34:49
+1
A:
Those programs use isatty(fileno(stdout))
to check if they are writing to a TTY (terminal) or something else (e.g. a pipe).
About faking a tty, check http://stackoverflow.com/questions/1401002/trick-an-application-into-thinking-its-stdin-is-interactive-not-a-pipe
ThiefMaster
2010-05-20 06:32:15