标准IO的特点和函数接口的分类
目录
标准IO的调用逻辑
缓存机制
标准IO的特点 *
定义
流的分类
流指针FILE *
标准IO是C库中定义的一组用于输入输出的函数接口。不同的操作系统只要移植了C库就可以使用,它是在系统调用之前做了一个二次封装,相当于是间接的进行了系统调用。可移植性强,可以在不同的系统环境下进行使用。
标准IO的调用逻辑
标准IO读/写操作
if(是linux操作系统)
{
调用linux的系统函数(文件io)
}
if(是Windows操作系统)
{
调用Windows的系统函数(文件io)
}
if(是ios操作系统)
{
调ios用的系统函数(文件io)
}
- 标准IO
缓存机制
标准IO在系统调用之前作了二次封装增加了缓存机制,减少了系统调用的次数,提高了程序的效率。
缓存机制
正常调用——》应用层读写文件——》调用内核层的函数接口—》内核层和硬件层进行交互-》拿到数据返回给应用层。
带有缓存机制-》应用层读写文件-》调用内核层的函数接口-》内核层和硬件层进行交互-》拿到数据返回给缓存区-》每次调用从缓存区当中拿数据。
标准IO的特点 *
- 标准IO是C库中提供的一组专门用于输入输出的函数接口
- 标准IO不仅在Unix系统上,在很多操作系统上都实现了标准IO。
- 标准I/O通过缓冲机制减少系统调用,提高效率
- 标准I/O库的所有操作都是围绕流(stream)来进行的,在标准I/O中,流用FILE *来描述。
- 标准IO默认打开三个流:标准输入(stdin),标准输出(stdout),标准出错(stderr)。
- 流
定义
所有的I/O操作仅是简单的从程序移进或者移出,这种字节流,就称为流。
流的分类
文本流/二进制流
流指针FILE *
FILE* 是一个指向 FILE 结构体的指针,这个结构体由标准库定义,用于表示一个打开的文件或输入/输出流。
查看命令
输入1,点击回车
放到FILE上,按住CTRL + ] CTRL + [
缓存区的结束地址和起始地址
- 缓存区的分类 *
- 全缓存—》基于文件
刷新缓存的条件:1 程序正常退出(遇到return(main))
2 exit 刷新缓存区
3 关闭文件流
4 fflush:强制刷新缓存区
5缓存区满
- 行缓存-》基于终端stdin/stdout
刷新缓存的条件:1 程序正常退出(遇到return(main))
2 exit 刷新缓存区
3 关闭文件流
4 fflush:强制刷新缓存区
5缓存区满
6 \n刷新缓存区
- 不缓存:stderr
注意:缓存区只有在用的时候才会开辟。
示例代码:
- 程序正常结束刷新缓存区
- 缓存区满
- \n刷新
- fflush刷新 man fflush
#include <stdio.h>
int fflush(FILE *stream);
功能:强制刷新缓存区
fflush(NULL)//强制刷新所有缓存区。
参数:文件流
返回值:成功:0
失败:EOF(-1)更新errno
示例代码:
- 标准IO的函数接口
1. 打开文件,关闭文件(fopen,fclose)
2.读/写一个字符(fgetc fputc)
3. 读/写一个字符串(fgets fputs)
4.读/写一个二进制文件(fread fwrite)
5. 移动指针(fseek)