在介绍二进制文件读写函数之前,有必要先了解一下二进制文件和文本文件。二进制文件和文本文件在物理存储上并没有什么区别,存储在硬盘上的文件都是以二进制方式存储的。二者的区别在于解释数据的逻辑不同。程序读取文本文件时,可以以字符方式读取,也可以以字节方式读取,将读取的数据解释为ASCII或unicode编码,也就是解释为字符,读取的字符可以直接输出到屏幕上显示出来;当程序读取二进制文件时,是以字节方式读取的,对读取数据的解释由读取程序决定。如读取图片文件时,读取图片的程序需要了解该文件的结构,并解释读取的数据,如果不了解该图片文件的结构,读取图片文件就会失败,也就无法把图片显示出来了。
函数声明
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
函数从stream输入流读取count个元素,每个元素的大小为size个字节,并存储到ptr指向的内存中。若读取成功,返回读取的元素总个数,若返回小于count的数值,则表示在读取时发生读取错误或到达文件末尾,在这种情况下,可以使用可以分别用ferror和feof进行检查。
size_t是标准C库中使用typedef关键字定义的基础数据类型的别名,在64位系统中为long long unsigned int,非64位系统中为long unsigned int。
函数声明
int ferror ( FILE * stream );
函数检查是否发生了与stream关联的错误,如果有关联错误则返回不同于零的错误值,否则返回零值。
函数声明
int feof ( FILE * stream );
函数检查是否发生了与stream关联的文件结束指示符,如果设置了,则返回一个不同于零的值,否则返回零值。
函数声明
size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
函数将count个元素,每个元素的大小为size个字节,写入到stream输出流,写入的元素放置在ptr指向的内存块中。若写入成功,返回写入的元素个数。若返回小于count的数值,则表示在写入时发生错误,在这种情况下,可以使用ferror进行检查。