1、标准C库IO函数
通过FILE文件指针操作
1、文件描述符:索引到对应的磁盘文件; 文件句柄(Windows)
2、文件读写指针位置:读写文件过程中指针的实际位置。对文件数据进行操作,有读指针和写指针。
3、I/O缓冲区:提高程序执行效率(降低写磁盘次数),缓冲区满了,只调用一次Linux系统I/O写入磁盘;
缓冲区默认8192byte,大概8K,不建议修改它。
内在剖析:
FILE.h
libio.h
通过指针来维护:
标准C库IO函数 首先调用 系统的IO函数,系统IO函数会返回文件描述符fd,标准C库IO函数得到 fd 后再给 _fileno
赋值。然后通过 _fileno的值
找到对应的文件,再通过各种指针对数据进行操作。
2、标准C库IO和Linux系统IO的关系
3、虚拟地址空间
问题:
1、4G的内存加载三个大小分别为1G、2G、3G的应用程序时会出现内存不够的问题;
2、释放部分程序后会出现内存不连续没法加载新程序的情况。
因此发明虚拟地址空间技术!
用户区:
- 用户区占用3G,内核区占用1G
- CPU中的MMU将虚拟地址和物理地址之间进行转换。
- 受保护地址:比如NULL
- .text是一些代码,二进制机器指令
- .data 已初始化的全局变量
- .bss 未初始化的全局变量
- 堆:new/malloc创建(由 低地址 往 高地址 存)
- 共享库
- 栈:局部变量 (由 高地址 往 低地址 存)
- 命令行参数
- 环境变量:env
内核区:
只能通过Linux系统调用来操作,调用Linux系统的API。