假输出流类型

时间:2010-05-20 06:28:49

标签: stream

默认情况下,某些程序会根据它们写入的流的类型格式化其输出。例如,lsls > file的输出看起来不同。我想知道一个程序是如何实现的。另外,有没有一种方法可以欺骗这些程序,就好像输出流是一个实际上是文件的终端(特别是当它们没有任何影响输出格式的选项时)?

2 个答案:

答案 0 :(得分:5)

通过isatty

if (!isatty(fileno(stdout))
{
    // redirected to a file or piped to a process
}

欺骗的一种方法是启动script而不是重定向。现在进入'tty'的所有内容(包括你输入stdin的内容以及发送到输出的内容)都被发送到一个名为typescript的文件。

答案 1 :(得分:2)

这些程序使用isatty(fileno(stdout))来检查他们是否正在写入TTY(终端)或其他东西(例如管道)。

关于伪造tty,请检查Trick an application into thinking its stdin is interactive, not a pipe