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

Nan*_*iao 6 c

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

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

int main(void)
{
        while (1)
        {
                printf("Hello World\n");
                sleep(1);
        }
}
Run Code Online (Sandbox Code Playgroud)

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

$ ./a.out
Hello World
Hello World
Hello World
Run Code Online (Sandbox Code Playgroud)

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

$ ./a.out > log.txt
^C
$ cat log.txt
$
Run Code Online (Sandbox Code Playgroud)

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

sur*_*mar 3

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

参考这个问题的答案。

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