2010-05-20 67 views
4

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

回答

5

通过isatty

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

一种方式来欺骗是不是做重定向,开始script。现在,所有进入'tty'的东西(包括你输入stdin和发送到输出的东西)都被发送到一个名为typescript的文件。

+0

更好的检查标准输出,而不是标准输入。 – ThiefMaster 2010-05-20 06:32:59

+0

@ThiefMaster - 感谢您的领导。固定。 – 2010-05-20 06:34:49