确保程序在终端中

making sure program is in a terminal

本文关键字:终端 程序 确保      更新时间:2023-10-16

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

Answer解释了使用一个基于*nix的函数isatty(),我发现它位于unistd.h中,而cpp标准并没有将其升级为cunistd,因为我知道它最初不在c的标准中。我试着再次搜索SO,但不能很好地理解。现在我有两个问题:

  • 在什么环境下(正确的词?)可以执行一个使用ascii转义码的程序,需要进行初始检查?因为我只支持cli
  • 根据ISO cpp标准,处理这个问题的合适解决方案是什么?使用unistd.h?这种用法会局限于现代cpp实践吗

在处理与ansi/colors相关的事情之前,我还有什么需要阅读/理解的吗?

在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
}