(五)文件IO

1 标准C库IO函数

image

  • 标准C库跨平台方式,在不同平台下调用不同平台的API。
  • 标准C库,效率比系统IO函数更高,因为有缓冲区,降低了写磁盘的次数。
  • 根据不同的情况选择,比如对磁盘读写时,选着标准C库IO函数;网络通信要求较高的实时率,就要选择Linux系统IO函数了。

2 标准C库IO函数和Linxu系统IO的关系

调用与被调用的关系

标准C库IO函数将数据读取缓冲区,缓冲区满后写入磁盘。
image

3 虚拟地址空间

程序所使用的内存地址叫做虚拟内存地址(Virtual Memory Address)。实际存在硬件里面的空间地址叫物理内存地址(Physical Memory Address)。操作系统引入了虚拟内存,进程持有的虚拟地址会通过 CPU 芯片中的内存管理单元(MMU)的映射关系,来转换变成物理地址,然后再通过物理地址访问内存.

image

  • 一个程序运行后对应一个进程,一个进程拥有一个虚拟地址空间
  • 32位机器有2^32B=4GB的虚拟地址空间
  • 虚拟地址空间中的数据会被MMU(内存管理单元)映射到真实的物理内存
  • 实际上不会占用4G的内存空间
  • 堆空间:从低地址到高地址
  • 栈空间:从高地址到低地址
  • 通过系统调用操纵内核

4 文件描述符

内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。

image

5

  • 文件描述符保存在内核区,由该进程的PCB(进程控制块)管理
  • 文件描述符表最大1024,前三个默认被占用,与当前终端绑定
  • 同一个文件可以打开多次,但对应的文件描述符不一样

参考链接
如何理解虚拟地址空间?
文件描述符
https://www.nowcoder.com/study/live/504/1/19

posted @   DaleLee  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示