缓存分类
一.全缓存
定义:在写在文件数据时,如果没有达到系统默认的满缓存,那么,程序要在执行完成后,自动刷新缓存,以将还没被写到的数据写入指定的文件,这个缓存方式成为全缓存
注意:对于全缓存需要注意几个问题:
如下例子:
3 int main(int argc,char *argv[]){
4 FILE *fp;
5 time_t it;
6 struct tm *lcal;
7 while(1){
8 it=time(NULL);
9 lcal=localtime(&it);
10 if(NULL == (fp=fopen(argv[1],"a"))){
11 printf("cannot open %s\n",argv[1]);
12 return 0;
13 }
14
15 printf("%d-%d-%d %d:%d:%d\n",(1900+lcal->tm_year),(1+lcal->tm_mo n),lcal->tm_mday,lcal->tm_hour,lcal->tm_min,lcal->tm_sec);
16
17 fprintf(fp,"%d-%d-%d %d:%d:%d\n",(1900+lcal->tm_year),(1+lca l->tm_mon),lcal->tm_mday,lcal->tm_hour,lcal->tm_min,lcal->tm_sec);
18 fflush(fp); //此句不可注释
19 sleep(1);
20 }
21 fclose(fp);
22 return 0;
23 }
在上面的18行,如果注释掉fflush(fp);,在程序飞正常退出,那么就不会写入数据到argv[1]中,因为此时为全缓存i/o操作,在终端时,写文件的操作还未被执行完成,即还未写入,程序就异常终端了
二,行缓存
定义:当在写文件数据时,如果没有达到系统默认的行缓存满空间,那么也要等到程序执行完成后,系统自动刷新缓存,以将还没有被写入的数据,完全写入;或者在写入缓存时,遇到换行符‘\n’,此时刷新缓存,将此前为满系统默认行缓存的数据全都写入指定的文件中;
三,无缓存
定义:在读取数据时,是将一个字节一个字节的数据,每次写入文件,不同于全缓存和行缓存(达到一定条件才写入文件数据)。