Fake output stream type

stream

Solution

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.

Problem

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)?

Original source

Related problems