一、什么是标准IO
标准IO:ANSI C标准提供的一系列用来进行输入和输出的函数
只要操作系统有c库就可以使用标准IO、标准IO有缓存区、标准IO在系统调用之上构造的。
二、文件的概念
Linux一切皆文件:
-普通文件
d 目录文件
l 链接文件
s socket文件
p 管道文件
c 字符设备文件
b 块设备文件
三、系统调用
系统调用:内核给应用程序留的接口(函数)
标准IO有缓冲区,文件IO没有缓冲区,有缓冲区可以减少系统调用的次数,系统的开销就会减少
全缓存:缓冲区满、强制刷新、文件关闭、程序结束时刷新缓冲区
行缓存:遇到换行符、缓冲区满、强制刷新、文件关闭、程序结束时刷新缓冲区
不缓存:没有缓存区
四、标准IO相关函数
打开一个文件,就会有缓冲区产生,也会有一个FILE类型的变量的产生,这个FILE类型是一个结构体,用来描述一个打开的文件(一个打开的流)的详细信息,所以如何操作文件(流)就是通过指向这个结构体变量的指针来操作的.
打开文件:FILE *类型指针产生
读写文件关闭文件:用FILE*类型的指针来操作
4.1 打开文件
FILE *fopen(const char *pathname, const char *mode);
函数功能:打开文件
参数1:要打开文件的路径
参数2:打开的方式
4.2 操作文件
int fgetc(FILE *stream);
函数功能:从指定的流中读取一个字符
参数:fopen的返回值,已经打开的文件流指针
返回值:成返回读到的ASCII码值,读到文件末尾或者失败返回-1
int fputc(int c, FILE *stream);
函数功能:向指定的流中输出一个字符
参数1:要输出的字符
参数2:文件流指针
返回值:成功返回写入的ASCII码值,失败返回-1
2、按行读写
char *fgets(char *s, int size, FILE *stream);
函数功能:从指定的流中读取字符串
参数1:保存读取到的内容的首地址
参数2:空间的大小
参数3:要操作的文件流指针
返回值:成功返回读取到的内容的首地址,失败返回NULL
注意:
(1)最多读取size-1个字符
(2)fgets读取的时候会将换行符也读入
int fputs(const char *s, FILE *stream);
函数功能:向指定的流中输出字符串
参数1:要输出的内容的首地址
参数2:要操作的流指针
返回值:成功返回非负整数,失败返回-1
总结:
(1)fgets和gets的区别
a、fgets比gets更安全
b、fgets会读取换行符,而gets不会
(2)fputs和puts的区别
puts会自动添加换行,而fputs不会