[英]Does not flushing a buffer lead to files having incorrect output
在下面的代码中,如果我不使用fflush(STDOUT)
刷新缓冲区,是不是FILE2
最终会同时获得“Hello world 1”和“Hello world 2”,因为缓冲区可能会在结束时被刷新程序,它可能会在最后保留这两个语句?
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
int FILE1 = dup(STDOUT_FILENO);
int FILE2 = open("HelloWorld.txt",O_WRONLY|O_CREAT,0666);
dup2(FILE1,STDOUT_FILENO);
printf("Hello World 1\n");
//THE LINE OF CONCERN
fflush(stdout);
dup2(FILE2,STDOUT_FILENO);
printf("Hello World 2\n");
close(FILE2);
close(FILE1);
return 0;
}
问题是你在这里工作的层次不同。 stdio-system 和stdout
将有自己的缓冲区,当您进行第二次dup2
调用时,该缓冲区不会关闭或刷新。 在进程终止时关闭stdout
时, stdout
缓冲区的内容仍将保留并写入。
因此需要fflush
调用来实际将stdout
缓冲区刷新到“文件”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.