【1】什么是IO
#include <stdio.h>
input:输入,从外部存储设备输入到内存中
output: 输出,从内存输出到外部存储设备。
> 存储设备:
>
> 外部存储设备,硬盘
>
> 内存:SDROM DDR4;
总结:数据从外部存储设备到内存,内存到外部存储设备的流动
【2】IO分类
1.文件IO
文件IO:由操作系统提供,与操作系统绑定,又称之为系统调用
| | windows | linux |
| ---- | ---------- | ----- |
| | file_read | read |
| | file_write | write |
注意:
1. 文件IO的复用性,可移植性较低
2. 文件IO涉及到cpu从用户空间切换到内核空间,C代码调用汇编语言等等操作,是一个**耗时的操作**,所以应该尽量减少文件IO的使用。
2.标准IO
标准IO:根据ANSI标准对文件IO进行二次封装,
printf();
if(OS == windows)
{
file_write;
}
else if(OS == Linux)
{
write;
}
作用:
1. 提高代码的复用性和可移植性;
2. 提高了输入输出的效率;
设置了一个缓冲区,缓冲区满或者满足一定条件后,调用文件IO,陷入内核,由内核完成对文件的输入输出,大大减少了对文件IO的使用。
2. 标准IO
【1】流和流指针
流(stream):将数据一个一个移入或者移出缓冲区的形式,称之为字节流;
流指针(FILE*):每打开一个文件,都会在内存中申请一片空间(缓冲区);
管理这片空间的变量都存储在FILE结构体中,FILE结构体由系统定义好了,我们使用即可;
1. FILE结构体成员
> vi -t指令 查找系统定义好的数据类型 和 变量 宏
>
> 1)sudo apt-get install ctags
>
> 2)cd /usr/include/ 如果只需要查看标准库中的内容
>
> 3)sudo ctags -R
>
> 4)在家目录的.vimrc中添加 set tags+=/usr/include/tags
>
> 追代码:
>
> ctrl + 鼠标左键
>
> 或者 左键选中要追的代码 ctrl + ]
>
> ```c
> $ vi -t FILE
> typedef struct _IO_FILE FILE;
> ctrl + 鼠标左键点击 _IO_FILE
> ```
```c
struct _IO_FILE {
char* _IO_buf_base; /* Start of reserve area. */ 缓冲区