确保程序位于终端中

Abh*_*yal 4 c++ linux terminal

我试图为一些必须使用 ansi 转义代码在终端中显示的字符串添加颜色。到目前为止,我还没有掌握整个 ascii 转义代码的事情,只是通过复制粘贴一些转义代码来尝试。然后看到这个答案,要求验证程序应该检查它是否在终端中执行,否则继续而不用转义码污染字符串?

答案解释了使用基于 *nix 的函数isatty(),我发现该函数驻留在其中,根据我的理解,它并不是由 cpp 标准unistd.h提升到的。我尝试再次搜索SO,但没有不太能理解。现在我对此有两个问题:cunistd

  • 在什么环境(正确的词?)下,使用 ascii 转义码的程序可以执行它需要初始检查?因为我只为 cli 构建。
  • 根据 ISO cpp 标准,处理此问题的正确解决方案是什么?使用unistd.h?这会限制现代 cpp 实践吗?

在处理 ansi/颜色相关的事情之前,还有什么我应该阅读/理解的吗?

Som*_*ude 5

在 POSIX 系统(如 Linux 或 OSX)上,该isatty函数确实是确定是否输出到终端的正确函数。

像这样使用它

if (isatty(STDOUT_FILENO))
{
    // Output using VT100 control codes
}
else
{
    // Output is not a TTY, could be a pipe or redirected to a file
    // Use normal output without control codes
}
Run Code Online (Sandbox Code Playgroud)

  • 您应该使用 termcap 库来获取转义序列,而不是对特定终端的序列进行硬编码。但所有现代终端仿真器都使用基于 70 年代 VT100 终端的序列。 (2认同)