当stdout被重定向到该文件时,为什么printf()不输出到文件?

时间:2017-01-25 00:40:26

标签: c

以下是一个简单的C程序:

#include <unistd.h>
#include <stdio.h>

int main(void)
{
        while (1)
        {
                printf("Hello World\n");
                sleep(1);
        }
}

构建并运行它,“Hello World”将打印在终端中:

$ ./a.out
Hello World
Hello World
Hello World

但如果将stdout重定向到文件,运行一段时间后,文件中仍然没有任何内容:

$ ./a.out > log.txt
^C
$ cat log.txt
$

为什么printf输出到stdout被重定向到的文件?

1 个答案:

答案 0 :(得分:0)

对于终端,默认情况下它是行缓冲区。在这里,您将stdout重定向到文件。所以,现在stdout没有指向终端。它指向一个文件。对于该文件,它默认是完全缓冲的。所以,你写完后就刷新了标准输出。

请参阅此question的答案。

正如@ js1所说,你必须在写完之后调用fflush(stdout)。