forkpty之后为什么“ls”没有着色

时间:2014-02-19 07:56:47

标签: linux fork ls pty

为什么此处执行的ls输出没有着色?

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <pty.h>
#include <sys/wait.h>

int main(int argc, char **argv ) {
    termios termp; winsize winp;
    int amaster; char name[128];
    if (forkpty(&amaster, name, &termp, &winp) == 0) {
        system("ls"); // "ls --color" will work here!
        return 0;
    }
    wait(0);
    char buf[128]; int size;
    while (1) {
        size = read(amaster, buf, 127);
        if (size <= 0) break;
        buf[size] = 0;
        printf("%s", buf);
    }
    return 0;
}

根据man(以及我正在检查的ls.c),如果isatty()返回true,则应该着色。 forkpty()之后一定是真的。此外,在此示例中,ls DOES 以列化模式输出!这意味着它感觉它有tty作为输出。

当然我不希望只有ls输出颜色,而是一个任意程序,感觉它后面有真正的颜色tty

我刚写了一个简单的测试:

#include <unistd.h>
int main() {
    printf("%i%i%i%i%i\n", isatty(0), isatty(1), isatty(2), isatty(3), isatty(4));
}

并在forkpty的子部分中调用它,并显示11100,这意味着ls应该是彩色的!

好的,因为似乎ls没有产生颜色输出的事实与forkpty()无关。它默认情况下不启用颜色。但是现在,也许这是另一个问题,如果它只是检查isatty(),为什么它不是颜色?

0 个答案:

没有答案