printf()函数什么时候刷新缓存

来源:互联网 发布:淘宝童装店简介 编辑:程序博客网 时间:2024/06/01 10:04

大家应该都知道,printf(),是先将格式化好的信息先输到缓冲区上,因为输入输出的缓存为行缓存,所以当填满I/O缓存后,才进行实际I/O操作或者遇到换行符‘\n’(或者执行fflush、floce、exit、return),缓存大小为1K。

请看如下程序:

#include <stdio.h>int main(int argv,const char *argv[]){int n;printf("inputs:");scanf("%d",&n);printf("%d\n",n);return 0;}

编译运行后:

root@linux:~/test# ./a.out input:

咦!编译运行后发现,input:怎么被刷新出来了,根据以上的逻辑不是只有遇到换行符‘\n’(或者执行fflush、floce、exit、return)才会从缓存中刷新出来吗?怎么会从缓存中刷新出来打印到屏幕上呢?

那是因为scanf()函数在缓存里面读数据时,会先将缓存区刷新,然后再读取数据

不止scanf()这个函数在缓存里面读数据时,会先将缓存区刷新,还有getc()、gets()、fgetc()、fgets()这几个读取数据时,也会会先将缓存区刷新,然后再读取数据。当然gets()是不建议使用的,就差被逐出标准了。

缓存类型:
全缓存:当填满I/O缓存后才进行实际I/O操作(或者执行fflush、flose、exit、return),4K大小
行缓存:当填满I/O缓存后才进行实际I/O操作或者遇到新航服‘\n’(或者执行fflush、floce、exit、return),1K大小
无缓存:标准错误输出strerr

原创粉丝点击