二进制I/O,通常用来一次性读写结构化的数据块。(因为有时候我们要读写的数据中包含换行符或者Null字符,无法使用fgets或fputs,而使用getc和putc又需要花费太多的实效,效率太低,因此需要二进制I/O)
函数原型:
#include <stdio.h>
size_t fread(void *restrict ptr,size_t size,size_t nobj,FILE *restrict fp);
size_t fwrite(const void *restrict ptr,size_t size,size_t nobj,FILE *restrict fp);
Both return: number of objects read or written
参数:
(1)ptr:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。
(2)size:要读写的字节数;
(3)nobj:要进行读写多少个size字节的数据项;
(4)fp:文件型指针。
(1)ptr:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。
(2)size:要读写的字节数;
(3)nobj:要进行读写多少个size字节的数据项;
(4)fp:文件型指针。
Example
float data[10];
if (fwrite(&data[2], sizeof(float), 4, fp) != 4)
err_sys("fwrite error");
将data[2]到data[5]的数据写入fp的文件
struct {
short count;
long total;
char name[NAMESIZE];
}item;
if (fwrite(&item, sizeof(item), 1, fp) != 1)
err_sys("fwrite error");
Here, we specifysizeas the size of structur
将一个item对象的数据写入fp