天天看点

printf缓冲区刷新

printf之缓冲区小结:

    今天调试程序,发现了一个有趣的现象,printf函数没有按照预期的结果输出重复的字符串,单步调试显示代码的确走到了打印屏幕的分支,没有显示不由得想到了是不是缓冲区去刷新的问题,在打印语句后加上换行符后得到解决。

    用printf()输出时是先输出到缓冲区,然后再从缓冲区送到屏幕上。linux下缓冲区刷新到屏幕这一步一般可以通过一下方式触发:

1使用fflush(stdout)强制刷新标准输出缓冲区。

2.缓冲区已满。

3.scanf()要在缓冲区里取数据时会先将缓冲区刷新。

4.\n进入缓冲区时。

5. 程序结束时。

    在小结下缓冲区的类型:

全缓冲:linux下默认为8192字节,在缓冲区满或者显示调用刷新函数后进行IO系统调用操作,普通磁盘文件通常使用全缓冲区访问。

行缓冲区:默认大小为128字节,当在遇到换行符或者缓冲区满时,标准IO库执行IO系统调用操作,终端即行缓冲区。

非缓冲区:标准IO库不对字符进行缓存,标准出错流stderr通常是不带缓冲区的。

继续阅读