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

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

发布时间:2019-06-15 02:34:50 所属栏目:站长百科 来源:cpp软件架构狮
导读: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 文件工具

文件工具是已打开的文件在内存中的暗示,首要用于成立历程和磁盘上的文件的对应相关。它由sys_open() 现场建设,由sys_close()烧毁。文件工具和物理文件的相关有点像历程和措施的相关一样。当我们站在用户空间来看 待VFS,我们像是只需与文件工具打交道,而无须体谅超等块,索引节点或目次项。由于多个历程可以同时打开和操纵 统一个文件,以是统一个文件也也许存在多个对应的文件工具。文件工具仅仅在历程概念上代表已经打开的文件,它 反过来指向目次项工具(反过来指向索引节点)。一个文件对应的文件工具也许不是惟一的,可是其对应的索引节点和 目次项工具无疑是惟一的。

清单4. 文件工具

  1. struct file { 
  2.  …… 
  3.  struct list_head f_list; /*文件工具链表*/ 
  4.  struct dentry *f_dentry; /*相干目次项工具*/ 
  5.  struct vfsmount *f_vfsmnt; /*相干的安装文件体系*/ 
  6.  struct file_operations *f_op; /*文件操纵表*/ 
  7.  …… 
  8. }; 
  9. struct file_operations { 
  10.  …… 
  11.  //文件读操纵 
  12.  ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); 
  13.  …… 
  14.  //文件写操纵 
  15.  ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); 
  16.  …… 
  17.  int (*readdir) (struct file *, void *, filldir_t); 
  18.  …… 
  19.  //文件打开操纵 
  20.  int (*open) (struct inode *, struct file *); 
  21.  …… 
  22. }; 

2.2.5 其他VFS工具

2.2.5.1 和文件体系相干

(编辑:湖南网)

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

热点阅读