Linux 的虚拟文件系统(真正理解“一切皆文件”)
不管是path_lookup_open()照旧path_lookup_create()最终都是挪用 __path_lookup_intent_open()来实现查找文件的成果。 查找时,在遍历路径的进程中,会逐层地将各个路径构成部门理会成目次项工具,假云云目次项工具在目次项缓存中,则直接从缓存中得到;假如该目次项在缓存中 不存在,则举办一次现实的读盘操纵,从磁盘中读取该目次项所对应的索引节点。获得索引节点后,则成立索引节点与该目次项的接洽。云云轮回,直到最终找到目 标文件对应的目次项,也就找到了索引节点,而由索引节点找到对应的超等块工具就可知道该文件地址的文件体系的范例。 从磁盘中读取该目次项所对应的索引节点;这将激发VFS和现实的文件体系的一次交互。以前面的VFS理论先容可知,读索引节点要领是由超等块来提供的。而 当安装一个现实的文件体系时,在内存中建设的超等块的信息是由一个现实文件体系的相干信息来添补的,这里的相干信息就包罗了现实文件体系所界说的超等块的 操纵函数列表,虽然也就包罗了读索引节点的详细执行方法。 当继承追踪一个现实文件体系ext3的ext3_read_inode()时,可发明这个函数很重要的一个事变就是为差异的文件范例配置差异的索引节点操 作函数表和文件操纵函数表。 清单8. ext3_read_inode
3.1.2 nameidata_to_filp子函数:__dentry_open 这是VFS与现实的文件辖档酮系的一个要害点。从3.1.1末节说明中可知,挪用现实文件体系读取索引节点的要领读取索引节点时,现实文件体系会按照文件 的差异范例赋予索引节点差异的文件操纵函数集,如平凡文件有平凡文件对应的一套操纵函数,装备文件有装备文件对应的一套操纵函数。这样当把对应的索引节点 的文件操纵函数集赋予文件工具,往后对该文件举办操纵时,好比读操纵,VFS固然对各类差异文件都是执行统一个read()操纵界面,可是真正读时,内核 却知道怎么区分看待差异的文件范例。 清单9. __dentry_open
3.2 sys_read() sys_read()体系挪用用于从已打开的文件读取数据。如read乐成,则返回读到的字节数。如已达到文件的尾端,则返回0。图9是sys_read()实当代码中的函数挪用相关图。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |