Fake output stream type
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 t开发者_运维知识库rick 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)?
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.
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 Trick an application into thinking its stdin is interactive, not a pipe
精彩评论