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

asz*_*waz 0 c stdout ansi-escape jq

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

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

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

Bas*_*tch 5

在 Linux 和可能的POSIX系统上,您可以将isatty(3)STDOUT_FILENO. 另请参见stdio(3)fileno(3)

所以你的代码是

if (isatty(STDOUT_FILENO)) {
   // standard output is a tty
   ...
}
Run Code Online (Sandbox Code Playgroud)

你必须打赌,到 2021 年,大多数终端模拟器都会支持ANSI TTY 转义

顺便说一下,jq是一个开源软件工具。您可以下载并研究其源代码。

请注意,C 编程语言标准(阅读n1570或更好)不了解 ttys。阅读TTY 揭秘网页。

  • 我强烈不同意。通过查看现有的开源代码,并可能改进它以满足您的需求,您总是会学到更多东西 (3认同)
  • [相关jq代码](https://github.com/stedolan/jq/blob/a9ce7244b4241c457bace5f7d7871268ed00c40b/src/main.c#L561) (2认同)