【问题标题】:How the Linux app decide the stdout is a terminal or normal file [duplicate]Linux应用程序如何确定标准输出是终端文件还是普通文件[重复]
【发布时间】:2014-09-12 09:43:21
【问题描述】:

当我们使用 ls 时,可以看到一些输出具有不同的颜色而不是默认的黑色,所以我认为输出应该添加一些转义序列来调整终端的颜色,但是当使用 ls > ls.log 时,在 ls.log 中我们看不到转义序列,因此程序需要确定输出是文件还是终端,如果是终端,它将使用 terminfo 打印出结果,否则只打印出真实结果没有转义序列! 是否有任何 API 可以用来决定我在 STD 输出之前提到的内容是终端文件还是普通文件。如果没有API,我们该怎么做才能找到真相!

【问题讨论】:

  • @PaulR 是的,它是重复的。回答时不知道这一点。

标签: linux terminal


【解决方案1】:

在 Linux 上,程序使用 glibc 函数 isatty() 来决定 stdout 是否是终端:

if(isatty(1)) {
    printf("stdout is a terminal");
}

man 3 isatty

【讨论】:

    猜你喜欢
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 2010-11-26
    相关资源
    最近更新 更多