C语言 文件
文件:记录在外部介质上的数据的集合,这个数据集有一个名称,叫做文件名
使用数据文件的目的:
1.数据文件的改动不引起程序的改动——程序与数据分离。
2.不同程序可以访问同一数据文件中的数据——数据共享。
3.能长期保存程序运行的中间数据或结果数据。
“输入”或“读”:从外部文件中得到数据给程序使用
“输出”或“写”:把程序中数据输出到外部文件中
文件存储方式:顺序存取和直接存取。
顺序存取:每当打开这类文件时,进行读或写操作时,总是从文件的开头开始,从头到尾地读或写。
直接存取(随机存取):可以通过调用C语言的库函数去指定开始读或写的字节号,然后直接对此位置上的数据进行读,或把数据写到此位置上。
文件可以分为文本文件和二进制文件。
文本文件:当输出时,数据转换成一串字符,每个字符以字符的ASCII码值存储到文件中,一个字符占用一个字节。当输入时,又把指定的一串字符按类型转换成数据。
二进制文件:当输出时,数据不经过任何转换,按计算机内的存储形式直接存放到磁盘上。当输入时,不经过任何转换,而直接将读入的数据存入变量所占内存空间。
文本文件特点:存储量大,转换为二进制速度慢,直观易记,便于对字符操作。
二进制文件特点:存储量小,无需转换,便于存放中间结果。
文件输入或输出的时候,系统将为输入或输出文件开辟缓冲区。
缓冲区是系统在内存中为各文件开辟的一篇存储区。
输出时,数据先填入缓冲区,缓冲区满时才把内容一次性输出到对应文件。
输入时,从输入文件输入一批数据放入缓冲区,输入语句从缓冲区依次读取数据,数据读完时,再从输入文件中输入一批数据放入。
文件指针
文件指针实际上是指向一个结构体类型的指针,这个结构体类型名为FILE和stdio.h中。
struct_iobuf { char *_ptr; //文件输入的下一个位置 int _cnt; //当前缓冲区的相对位置 char *_base; //指基础位置(应该是文件的起始位置) int _flag; //文件标志 int _file; //文件的有效性验证 int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取 int _bufsiz; //文件的大小 char *_tmpfname; //临时文件名 }; typedef struct _iobuf FILE;
打开文件
在对文件进行读、写操作之前,首先要解决的问题是如何把程序中要读,写的文件与磁盘上实际的数据文件联系起来。C语言中通过调用fopen来实现。
FILE *fopen(char *)