linux系统的理念是一切设备皆文件,为屏蔽底层细节差异,抽象出vfs层,它给上层提供统一访问入口;因此任何物理和逻辑上的设备或文件均可采用统一open,read,write,close等操作入口进行访问。
open系统调用,产生软中断而进入内核层。
对于普通的文件而言,其所在文件系统被创建时,就已经决定了该文件系统中所有普通文件的访问方式;对一个具体的文件系统而言,对应着具体的实现接口。
对一个普通设备而言,其操作函数的实现有底层驱动根据实际功能需求实现,但都保持了良好的通用接口。
对于在某个文件系统中的某个文件,其唯一的信息是inode,inode作为文件系统中的metadata,其描述了该文件的所有信息。
应用层某进程调用open某文件,系统返回句柄fd,进程内用file结构去描述该文件,在进程内会将file放置到当前进程描述表中,因此file就和fd绑定了。进程描述表毕竟有限,所以某进程不能无限制太多打开文件。
该fd只对本进程有效,只有在该进程内,它才和file结构有对应关系;
open流程大概为:
陷入内核态后,拷贝应用层传入的文件路径buffer到内核中(即vfs中的dentry);
分配空闲的fd;
获取该文件inode信息,并分配file结构;
绑定file到当前进程描述表中
返回fd
阅读(1276) | 评论(0) | 转发(0) |