繁体   English   中英

不刷新缓冲区会导致文件输出不正确

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM