标准I/O中的缓冲区

来源:互联网 发布:linux head -1 编辑:程序博客网 时间:2024/06/06 20:53
对于标准的I/O函数在使用时会经常面对缓冲区的问题。缓冲区是在内存中开辟了一块空间,用来暂时的存放数据,可分为三种:全缓存、行缓存、不缓存。


全缓存:是大多数情况下遇到的一种缓存,大小是4096字节。当遇到缓冲区满的时候、强制刷新的时候(int fflush(FILE* fp))、程序执行过程中正常结束的时候
可进行刷新。
行缓存:标准输入、输出流(stdin、stdout)对应行缓存大小为1024字节,可进行刷新的情况除了全缓存的三种情况外,还包括遇到‘\n’的情况。
不缓存:对应于标准出错流

一.全缓存:
在进行循环记录系统时间操作时,使用fprintf函数进行格式化输出:
void fun(FILE* fp,struct tm* tmp)
{
time_t t;
int i;
while(1)
{
time(&t);
tmp = localtime(&t);
i = count(fp);
fprintf(fp,"%-2d:%d-%d-%d %d:%d:%d\n",i,1900+tmp->tm_year,1+tmp->tm_mon,tmp->tm_mday,tmp->tm_hour,tmp->tm_min, tmp->tm_sec);
sleep(1);
fflush(fp);
}
}
该函数实现每隔一秒向文件中输入一次时间。因为要求实时写入,所以添加fflush(fp)进行强制刷新,不满4096字节便进行输出。


二、行缓存
#include<stdio.h>
int main(int argc, const char *argv[])
{
int i;
for(i = 0;i < 300;i++)
{
printf("%-3d ",i);
}
while(1);
return 0;
}
在上述程序中,只能输出0~255。因为行缓存区大小为1024字节。
0 0