应用层程序的api -> c标准库的api -> 操作系统的api -> 驱动程序的api -> 硬件层(驱动程序的api操作硬件):
c库IO函数的工作流程:
一个应用层的程序运行后
一、
要对其进行进程管理(如进程表项task_struct)
进行内存管理(如页表-建立映射关系)
虚拟文件系统VFS(linux中万物皆文件,个人认为是定位文件用的,先在虚拟系统中根据fd找出对应文件,然后根据虚拟文件系统与硬盘的挂载关系,在硬盘上定位该文件)
设备驱动管理(最后要调用驱动函数的api来控制硬件)
二、
系统会从main()函数入口(附带命令行参数),启动程序
应用层的api(代码段) ->c标准库的api(共享库) -> 操作系统的api(共享库) -> 驱动程序的api(内核空间中设备驱动) -> 硬件层(内核空间中的VFS)
若进程A和进程B是父子进程,则A、B共享的物理内存:
用户空间:
1.代码段
2.共享库
3.动态库
内核空间:
文件表项,i节点等
虚拟地址空间:
文件描述符:



