开发者

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜