首页 > 解决方案 > 如何判断stdout是否支持ANSI转义码

问题描述

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

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

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

标签: cjqstdoutansi

解决方案


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

所以你的代码是

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

而且你必须打赌,到 2021 年,大多数终端仿真器都支持ANSI TTY 转义

顺便说一句,jq是一个开源软件工具。您可以下载然后研究它的源代码。

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


推荐阅读