系统级I/O(csapp)
- 在Linux系统中,所有I/O设备都是文件
- shell在每个进程的开始都打开三个文件
- 标准输入,标准输出和标准错误
- shell在每个进程的开始都打开三个文件
- 带缓冲和不带缓冲的函数不可交叉使用
- 元数据
- 记录文件的相关数据
- 目录
- 每个目录项都是一个结构
- 共享文件
- 标识符表
- 每个进程都有一个标识符表
- 每个表项都指向文件表中的一个表项
- 文件表
- 所有进程共享一个文件表
- 每个表项由文件位置,引用计数和指向V-node表的表项的指针
- v-node表
- 所有进程共享
- 这个才是真正的描述唯一的磁盘文件
- 标识符表
- 当调用fork函数时,父子进程指向文件表的相同表项(但是是独立的两个描述符表)
- 重定向
- 使用dup2函数将一个旧描述符表项(终端)指向一个新的表项(文件)
- 使用dup2函数将一个旧描述符表项(终端)指向一个新的表项(文件)