首先看函数的原型:
size_t fread ( void *buffer, size_t size, size_t count, FILE *stream);
各参数的意义:
void* buffer: 这是指向存储被读入数据的指针,亦即所需要读的数据存储地址,形参是无类型的,使用时须把实参转型为实际的数据类型,否则会报警告。
size_t size:
这是函数一次读取的数据块大小,所谓次数,即后面的参数count规定读多少块。
size_t count: 这是读多少块数据的计数器,解释如上。
FILE* stream: 无需解释。
返回值:
size_t类型的,是计数器,是成功读取了多少块的意思。
举个实例,如下调用代码:
size_t readden = fread((char*)str, 100, 5, f);
这个调用,是令fread()函数做5次读取动作,每次读100个字节,即总共“期望”读取500个字节(100*5),但实际的数据流,可能没有500个字节,比如只有420个字节,那么只能成功读取4次100Bytes,最后一次是读不到100Bytes的,这样返回值就是4,表示成功读取了4次,而buffer中,则只有400Bytes。这是告诉你实际读了多少数据的。
fread()/fwrite()的读写,比fscanf()/fprintf()快,因为这是二进制读写,不用分析文本和转换数据。它的速度,体现在每次读取一大块数据上,那个size参数不宜太小,那种每次读取1个byte的动作,是低效的,此时应用fgetc()/fputc()而不是fread()/fwrite()。系统读写流数据,可能带缓冲机制(那未必是C库的缓冲,而是操作系统的缓冲,不是程序可以控制的),当设计的size尺寸与系统的缓冲块单元匹配时,读写速度最高,那个绝不是1Byte,通常不是4K就是16K。
[
本帖最后由 TonyDeng 于 2015-7-16 14:35 编辑 ]