全部博文(245)
分类: C/C++
2009-03-27 08:57:00
我们知道,在ansi-c中,对文件的操作是通过指针来完成的, FILE *fp, FILE类型是一个结构体,记录了文件的很多信息,包括文件的长度、缓存区的大小、缓存区的地址、操作标志等,同FILE 类型的指针 *fp,就可以完成对文件的操作,没读写相应的数据,结构体内部的文件指针也会移动相应的位置,而文件的缓存区是可以人为设定的,设定缓存区可以通过函数 setbuf 和setvbuf 来完成,这两个函数的命令格式为:
setbuf(FILE *fp, char *buf);
setvbuf(FILE *fp, char *buf, int type,unsigned size);
type的取值:
_IOFBF _IOLBF _IONBF
三个常量分别表示满缓存区、行缓存区、无缓存。满缓存区只有在缓存区数据写满后才将数据写入文件,同时清空缓存,等来接受其他的数据,行缓存会将接受数据时,如果碰到数据"\0",或者行缓存区结尾,就把数据写入文件,_IONBF,为缓存,直接写入文件。如上,可以归纳如下:如果打开可写文件后,通过fwrite 或之其他的函数写入数据,对与_iofbf,如果缓存区没有存满数据,是不会写入文件的,只有fclose flush fflush中的任何一个出现,对与_iolbf,如果在写入数据时又换行符出现,或这遇到行结尾,或者碰到上便的三个函数中的一个,就会将数据写入文件,对ionbu就是直接对文件进行操作了,
在以后的文件操作中,要注意上便的问题,如果采用满缓存区或这行缓存区,虽然可以节省内核时间,但由于数据不能及时的写入文件中,对又跟数据实时性要求高的应用方便,会有问题,