Linux应用程序如何确定标准输出是终端文件还是普通文件

Linux应用程序如何确定标准输出是终端文件还是普通文件,linux,terminal,Linux,Terminal,当我们使用ls时,当可以看到一些输出有不同的颜色而不是默认的黑色时,所以我认为输出应该添加一些转义序列来调整终端的颜色,但是当使用ls>ls.log时,在ls.log中我们看不到转义序列,因此,程序需要确定输出是文件还是终端如果是终端,它将使用terminfo打印结果,否则它只打印出真实结果,而没有转义序列! 在STD输出是终端文件还是普通文件之前,我们是否可以使用任何API来决定我提到的内容。如果没有API,我们应该怎么做才能找到真相 在Linux上,程序使用glibc函数isatty()来决

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

在Linux上,程序使用glibc函数
isatty()
来决定stdout是否为终端:

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

看。

@PaulR是的,它是一个复制品。我在回答时没有意识到这一点。