编译器:VS2022
流
学习文件处理函数之前,首先要理解一个概念:流(stream)
流是一个动态的概念,可以将一个字节形象比喻成一滴水,字节在设备,文件,程序之间的传输就是流,类似于水在管道中的传输。
如何创建流?FILE* fp FILE是c语言中的一个特殊字节,就像char int 一样,FILE创建出来的变量就是流,并且FILEC创建出来的fp一定是要指针类型*fp。文件的指针指向文件的每一次,文件的读和写都要用到。
文件处理形式:缓存区与非缓存区
缓存文件系统
C语言中I/O操作就是控制字节一进一出,如果让cpu没输出一个字节,让磁盘写入一次,将会十分耗时。采用缓存区可以有效缓解这种矛盾,在内存中开辟一块专门的内存区域,当cpu写出的字节积攒到一定数量,在一次性写入磁盘。当从磁盘读入数据,也在内存中开辟一块区域,一次性从磁盘读入一块数据到缓存区,让cpu慢慢取用。这就是缓存区的作用。这个过程由电脑自动完成,无需程序员操作。
非缓存文件系统
非缓存文件系统指系统不为文件自动开辟缓存区,但程序设计人员可以自行开辟。
如何开辟?可以仿造缓存文件系统,例如创建数组char arr[100]。
这个数组就等于在内存开辟一块缓冲区。
创建数组(开辟缓存区)——打开/创建文件——写入文件(缓存区的内容写入文件)——关闭文件。
文件的打开与关闭
r 打开一个文件,只能读。
w 创建一个文件,只能写。
a 打开一个文件,只能在尾部添加。
r+ 打开一个文件,可读可写。
w+ 创建一个文件,可读可写。
a+ 打开一个文件,只能在尾部添加,可读可写。
rb 只读,为输入打开一个二进制文件
wb 只写,未输出创建一个二进制文件
用于打开文件fopen_s()
函数原型:errno_t _cdel fopens_s(FILE**_stream,char*_filename,const char *_mode);