Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6086949
  • 博文数量: 2759
  • 博客积分: 1021
  • 博客等级: 中士
  • 技术积分: 4091
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-11 14:14
文章分类

全部博文(2759)

文章存档

2019年(1)

2017年(84)

2016年(196)

2015年(204)

2014年(636)

2013年(1176)

2012年(463)

分类: LINUX

2014-12-21 10:26:41

原文地址:VFS之open调用的理解 作者:镇水铁牛

        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
阅读(1225) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~