以下是一个简单的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
被重定向到的文件?
答案 0 :(得分:0)
对于终端,默认情况下它是行缓冲区。在这里,您将stdout重定向到文件。所以,现在stdout没有指向终端。它指向一个文件。对于该文件,它默认是完全缓冲的。所以,你写完后就刷新了标准输出。
请参阅此question的答案。
正如@ js1所说,你必须在写完之后调用fflush(stdout)。