标准I/O

来源:互联网 发布:私家车拼车软件 编辑:程序博客网 时间:2024/05/21 13:25

缓存分类

一.全缓存

 定义:在写在文件数据时,如果没有达到系统默认的满缓存,那么,程序要在执行完成后,自动刷新缓存,以将还没被写到的数据写入指定的文件,这个缓存方式成为全缓存

注意:对于全缓存需要注意几个问题:

如下例子:

  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’,此时刷新缓存,将此前为满系统默认行缓存的数据全都写入指定的文件中;

三,无缓存

定义:在读取数据时,是将一个字节一个字节的数据,每次写入文件,不同于全缓存和行缓存(达到一定条件才写入文件数据)。