struct_iobuf{
char*_ptr;
int _cnt;
char*_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char*_tmpfname;
};
typedefstruct_iobufFILE;
_ptr 当前指针,指向文件缓冲区中要写入或读取数据的地址
_cnt 缓冲区中剩余可用空间大小(写文件时); 有效数据剩余大小(读文件时);
_base 缓冲区首地址
_flag 打开文件的标志如”r” “w+” “rb”等
_bufsize 缓冲区总大小
C语言对磁盘文件的读写以文件流的方式进行了抽象---说白了就是把文件数据读取到内存中,操作内存就相当于间接操作文件。用fopen函数打开指定路径的文件,其实在不同的操作系统平台下,会调用各自操作系统的文件操作API,以间接实现C语言的跨平台。由于打开或定入文件,不知道文件的大小,所以会在堆中开辟一块相应大小的存储空间。当读取文件时,会先将文件的部分数据写入到这块内存空间中以供程序使用。当文件操作完毕,则会调用fclose关闭文件指针,也就是释放打开文件操作时所分配的堆内存空间,以避免内存泄漏。同理,要将数据写入文件中,也必定要将数据先写入到开辟的缓冲区中,当缓冲区中数据写满或遇到fclose, fflush时则会真正的将内存中的数据写入到磁盘文件中去。以提高效率,避免过于频繁写入所引起的效能低下和减少磁盘寿命。