加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Linux 的虚拟文件系统(真正理解“一切皆文件”)

发布时间:2019-06-15 07:55:13 所属栏目:站长百科 来源:cpp软件架构狮
导读:副标题#e# 1,引言 Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等。通过使用同一套文件 I/O 系统 调用即可对 Linux 中的任意文件进行操作而无需考虑其所在的具体文件系统格式;更进一步,对文件的 操作可以跨文件系统而执行。如图 1 所示,我

索引节点对象存储了文件的相关信息,代表了存储设备上的一个实际的物理文件。当一个 文件首次被访问时,内核会在内存中组装相应的索引节点对象,以便向内核提供对一个文件进行操 作时所必需的全部信息;这些信息一部分存储在磁盘特定位置,另外一部分是在加载时动态填充的。

清单2. 索引节点

struct inode {//索引节点结构 …… struct inode_operations *i_op; /*索引节点操作表*/ struct file_operations *i_fop; /*该索引节点对应文件的文件操作集*/ struct super_block *i_sb; /*相关的超级块*/ ……};struct inode_operations { //索引节点方法 …… //该函数为dentry对象所对应的文件创建一个新的索引节点,主要是由open()系统调用来调用 int (*create) (struct inode *,struct dentry *,int, struct nameidata *); //在特定目录中寻找dentry对象所对应的索引节点 struct dentry * (*lookup) (struct inode *,struct dentry *, struct nameidata *); ……};

2.2.3 目录项对象

引入目录项的概念主要是出于方便查找文件的目的。一个路径的各个组成部分,不管是目录还是 普通的文件,都是一个目录项对象。如,在路径/home/source/test.c中,目录 /, home, source和文件 test.c都对应一个目录项对象。不同于前面的两个对象,目录项对象没有对应的磁盘数据结构,VFS在遍 历路径名的过程中现场将它们逐个地解析成目录项对象。

清单3. 目录项

  1. struct inode {//索引节点结构 
  2.  …… 
  3.  struct inode_operations *i_op; /*索引节点操作表*/ 
  4.  struct file_operations *i_fop; /*该索引节点对应文件的文件操作集*/ 
  5.  struct super_block *i_sb; /*相关的超级块*/ 
  6.  …… 
  7. }; 
  8. struct inode_operations { //索引节点方法 
  9.  …… 
  10.  //该函数为dentry对象所对应的文件创建一个新的索引节点,主要是由open()系统调用来调用 
  11.  int (*create) (struct inode *,struct dentry *,int, struct nameidata *); 
  12.  //在特定目录中寻找dentry对象所对应的索引节点 
  13.  struct dentry * (*lookup) (struct inode *,struct dentry *, struct nameidata *); 
  14.  …… 
  15. }; 

2.2.4 文件对象

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读