Linux应用程序如何决定stdout是终端文件还是普通文件

时间:2014-09-12 09:43:21

标签: linux terminal

当我们使用ls时,可以看到一些输出有不同颜色而不是默认的黑色,所以我相信输出应该添加一些转义序列来调整终端的颜色,但是当使用ls>时ls.log,在ls.log中我们看不到转义序列,所以程序需要判断输出是文件还是终端,如果它是终端,它将使用terminfo打印出结果,否则只打印没有逃脱序列的真实结果! 我们可以使用任何API来决定我在STD输出之前提到的东西是终端文件还是普通文件。如果没有API,我们该怎么做才能找到真相!

1 个答案:

答案 0 :(得分:1)

在Linux上,程序正在使用glibc函数isatty()来判断stdout是否是终端:

if(isatty(1)) {
    printf("stdout is a terminal");
}

请参阅man 3 isatty