本文介绍了难道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的总是冲在遇到一个新行的缓冲区?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!