如何判断stdout是否支持ANSI转义码

How to judge whether stdout supports ANSI escape code

在不支持ANSI转义码的终端中,输出类似\033[0m这样的颜色控制码不仅没有效果,还会干扰终端

我知道一个json格式化工具jq,判断终端是否可以使用ANSI转义码。

我想知道,如何通过C语言实现这个功能?

在 Linux 并且可能 POSIX systems, you might use isatty(3) with STDOUT_FILENO. See also stdio(3) and fileno(3)

所以你的代码是

if (isatty(STDOUT_FILENO)) {
   // standard output is a tty
   ...
}

而且您敢打赌,到 2021 年,大多数终端仿真器都将支持 ANSI TTY escapes

顺便提一下,jq is an open source 软件工具。您可以下载并研究其源代码。

注意 C 编程语言标准(阅读 n1570 or better) does not know about ttys. Read the TTY demystified 网页。