重定向 缓冲区
如何理解一切皆文件(硬件设备方面)
OS如何管理各种硬件设备?
先描述,再组织
struct device
vfs
虚拟文件系统
多态技术,具体接口都继承了read/write
属性/类型一样(同一函数名)
但是值可以不同(函数实现/属性值)
如read,write
类似iterator
为什么语言喜欢封装
方便用户操作
提高语言可移植性(跨平台,多态)
I/O基本过程 文件内核级缓冲区 重定向
write本质是拷贝函数,拷贝到文件的内核缓冲区
从缓冲区保存到磁盘:由OS自主决定
每个文件都有自己的内核缓冲区
读取:从磁盘加载到文件内核缓冲区
修改:本质是先读取,再写入
缓冲区作用:
效率高(速度:内存>磁盘,效率:一次I/O>多次I/O)
fd分配规则:最小的未使用的
printf封装了fprintf,固定了FILE* stdout,固定了fileno=1
重定向
上层代码不知情,(认为0,1,2不变)
将新文件地址拷贝到要定向的目标位置
dup2
int dup2(int oldfd,int newfd)
dup2(3,1)将fd为3拷贝覆盖fd1
重定向示例
do while(0),用于包裹代码块, 正确识别宏