1.IO的种类
IO分为标准IO和文件IO,标准IO由库函数调用,文件IO由系统调用。
2.标准IO
2.1什么是FILE
FILE本身是一个结构体,在调用fopen的时候产生一个结构体指针,在读写文件的时候通过FILE指针完成。
#include <stdio.h>
typedef struct _IO_DILE FILE;
struct _IO_FILE
{
char *_IO_buf_base; //缓冲区的起始地址
char* _IO buf_end;//缓冲区的结束地址
...
}
在一个正在执行的程序中,默认已经有了三个FILE指针,stdin(标准输入) stdout(标准输出) stderr(标准出错)。
2.2 fopen函数
FILE *fopen(const char *pathname, const char *mode);
@pathname:想要打开的文件路径及名字
@mode:想打开的方式
r:以只读方式打开文件,将光标定位到文件的开头
r+:以读写方式打开文件,将光标定位到文件的开头
w:以只写方式打开文件,如果文件存在就清空,如果文件不存在就创建
w+:以读写方式打开文件,如果文件存在就清空,如果文件不存在就创建
a:以追加的方式打开文件,如果文件不存在就创建文件,如果文件存在将光标定位的结尾写
a+:以读和追加的方式打开文件,如果文件不存在就创建文件,如果读从开头读,如果写从结尾写
返回值:成功返回FILE指针,失败返回NULL,置位错误码。
2.3 fclose函数
#include <stdio.h>
int fclose(FILE *stream);
功能:关闭文件
参数 :@stream文件指针
返回值:成功返回0,失败返回EOF(-1),置位错误码
2.4 strerror函数
#include <string.h>
功能:将错误码转换为错误信息的字符串
参数:@errnum:错误码
返回值:错误信息的字符串
2.5 perror函数
#include <stdio.h>
void perror(const char *s);
功能:将错误信息打印到终端上
参数:@s:用户的附加信息
返回值:无
2.6 fputc/fgetc函数
#include <stdio.h>
int fputc(int c,FILE *stream);
功能:@c:字符中的ascii @stream:文件指针
返回值:成功返回字符的ascii值,失败返回EOF(-1)
int fgetc(FILE *stream)
功能:从文件中读取字符
参数:@stream:文件指针
返回值:成功读取到的字符的ascii,读取到文件结尾或者出错,返回EOF(-1)
2.7 fgets/fputs函数
char *fgets(char *s,int size,FILE *stream);
功能:从stream对应的文件中最多读取size-1个字符到s中,当遇到EOF或者换行符的时候停止,如果是换行符停止的,它会将换行符存储到s中。s的结束:在s存储的最后一个字符之后通过添加'\0'的形式表示结束
例:s=0123456789'\n''\0' size=100 文件第一行10个字符
s=01234'\0' size=6 文件第一行5个字符
参数:@s:用于存储读取到的字符串的首地址 @size:读取字符串中字符的个数 @stream:文件指针。
返回值:成功返回大于0的值,失败返回EOF
2.8缓冲区的刷新时机
2.8.1行缓冲的刷新时机
1.行缓存遇到换行符的时候会刷新缓冲区
2.当程序结束的时候会刷新缓冲区
3.当输入输出发生切换的时候
4.当关闭文件的时候会刷新缓冲区
5.缓冲去满也会刷新缓冲区
6.主动刷新缓冲区
2.8.2全缓存的刷新时机
1.当程序结束的时候会刷新缓冲区
2.当输入输出发生切换的时候
3.当关闭文件的时候会刷新缓冲区
4.缓冲去满也会刷新缓冲区
5.主动刷新缓冲区
续写下篇