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

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

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

文件对象是已打开的文件在内存中的表示,主要用于建立进程和磁盘上的文件的对应关系。它由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 和文件系统相关

(编辑:西安站长网)

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

推荐文章
    热点阅读