1.标准IO的介绍:
标准IO库由ANSI C标准说明
标准IO在UNIX上是对文件IO的封装
IO:Input,Output
2.流和FILE对象:
FILE:每个被使用的文件都在内存中开辟一个区域,用来存放文件的有关信息,这些信息是保存在一个结构体类型的变量中,该结构体类型是由系统定义的,取名为FILE
FILE 结构定义的对象 FILE * 称之为流对象,也叫文件流指针。
流 (stream) : 数据从文件当中流入和流出所体现出来的字节流叫做流,流的实质就是内存中的一个缓冲区,使用标准IO库打开或创建一个文件时,就是将文件缓冲到缓冲区中。
流的分类:
(1)二进制流:
定义:处理的是二进制序列。若流中有字符,则用一个字节的二进制ASCII码表示;若为数字,则用对应的二进制数表示,对‘\n’不进行变换
eg:
数字 2001表示:00000111 11010001
(2)文本流 :
定义:处理的数据以字符出现。在文本流中,‘\n’被转换为回车符CR和换行符LF的ASCII码的0DH和0AH,遇到‘\n’便下一行,输出时又转换为‘\n’
eg:
数字2001表示:‘2’ ‘0’ ‘0’ ‘1’
ASCII:50 48 48 49
3.文件操作步骤
(1)打开文件
(2)io操作
(3)关闭文件
4.操作相关函数
(1)FILE *fd = fopen(const char *path, const char *mode);
功能: 打开一个文件并建立一个流
参数:
path:要打开文件的路径
mode:
r 只读(指向文件开头)
文件不存在报错
文件存在则只读打开
r+ 读写(指向文件开头)
文件不存在报错
文件存在则读写打开
w 只写(指向文件开头)
文件不存在则创建
文件存在则清零只写打开
w+ 写读(指向文件开头)
文件不存在则创建
文件存在则清零写读打开
a 追加可写(指向文件开头)
文件不存在则创建
文件存在则追加只写打开
a+ 追加读写(读在开头,输出则在结尾)
文件不存在则创建
文件存在则追加读写打开
返回值:
成功返回建立的文件流指针 fd
失败返回NULL
(2)int fputc(int c,FILE*stream);
功能:
把一个字符写入stream对应的文件流对象。
参数:
c 要写入的字符
stream 要写入的目标文件流对象
返回值:
成功:返回写入的字符ASCII码值
失败:EOF
eg:写入hellw
(3)int fputs(const char *s, FILE *stream);
功能:
从s所在的本地内存中获取一行数据,并写入stream对应的文件
流对象。
参数:
s 要写的信息,一般是固定的字符串或者有数据的数组。
stream 要写入的目标文件流对象
返回值:
成功 nonnegative number on success
失败 EOF;
eg:写入world
写入hello world
(4)int fgetc(FILE *stream);
功能:
从流中读取一个字符
参数:
stream:文件流指针
返回值:
成功返回读到字符的ASCII码值
读到文件末尾返回EOF
失败返回EOF -1
eg:
相当于:
(5)char *fgets(char *s, int size, FILE *stream)
功能:
从stream流对象关联的文件中获取size大小字节的文本数据
并存储到s对应的本地内存(栈区数组,堆区内存)
参数:
s 要存储数据的本地内存
size 要获取的数据长度,单位字节。
stream 要获取的目标文件流对象,
可以是stdin ,程序会阻塞等待
如果是普通文件fp 则指向文件第一行数据
返回值:
成功 返回指向有效数据的首地址,一般等于s的地址
失败 或者 文件末尾 NULL;
eg:
举例子:
(1)复制图片
(2)读取文件并统计行数
(3)统计文件中abcdefghijkmnopqrstuvwxyz分别有几个,并分别打印出来: