本文介绍了难道printf的总是冲在遇到一个新行的缓冲区?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的机器运行Ubuntu 10.10,和我使用标准的GNU C库。我认为,如果有格式字符串描述一个换行符。printf刷新缓冲区中的IM pression下,但是下面的code反复似乎逆势这一趋势。有人能解释,为什么缓冲区不会被刷新。

 的#include<&stdio.h中GT;
#包括LT&;&unistd.h中GT;
#包括LT&;&fcntl.h GT;
#包括LT&; SYS / wait.h>诠释的main()
{
    INT RC;
    关闭(1);
    接近(2);
    的printf(HI 1 \\ n);
    fprintf中(标准错误,错误。\\ n);    开放(newfile.txt,O_WRONLY | O_CREAT | O_TRUNC,0600);
    的printf(什么\\ n吗?);
    fprintf中(标准错误,我说错误。\\ n);    RC =叉();    如果(RC == 0)
    {
        的printf(再说\\ n吗?);
        fprintf中(标准错误,ERROR错误。\\ n);
    }
    其他
    {
        等待(NULL);
    }    的printf(BYE \\ n);
    fprintf中(标准错误,HI 2 \\ n);    返回0;
}

newfile.txt的运行该程序后的内容如下:

  HI 1
什么?
再说一遍?
BYE
HI 1
什么?
BYE


解决方案

没有,标准说,标准输出最初完全缓冲如果输出设备可以被确定为非交互式的。

这意味着,如果您重定向标准输出到一个文件,它不会换行冲洗。如果你想尝试和的它行缓冲,使用则setbuf setvbuf用来

C99的相关部分, 7.19.3文件,第7段,规定:

Just keep in mind section 5.1.2.3/6:

这篇关于难道printf的总是冲在遇到一个新行的缓冲区?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-26 21:53