Chinaunix首页 | 论坛 | 博客
  • 博客访问: 390888
  • 博文数量: 87
  • 博客积分: 2571
  • 博客等级: 少校
  • 技术积分: 920
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-29 13:10
文章分类

全部博文(87)

文章存档

2012年(49)

2011年(7)

2010年(26)

2009年(5)

分类: LINUX

2009-12-30 12:52:03

不同的文件系统有不同的实现,但和VFS的接口都是通过一个file_operation数据结构
(include/linux/fs.h),作为函数跳转表。
 
struct file_operation{
   struct module *owner;
   .. llseek()
   .. read()
   .. write()
   .. readdir()
   .. ioctl()
   .. mmap()
   .. open()
   .. flush()
   .. fsync()
   .. lock()
}
 
用户进程只和VFS交互。
 
-----------------------------------------
task_struct中的两个相关结构体
 
struct task_struct {
  /*
    struct fs_struct{
        atomic_t  count;
        rwlock_t  lock;
        int umask;
 
        /*
             文件的属性,如文件名、访问权限
             root  本进程的根目录,即用户登录时看到的根目录
             pwd   进程当前所在目录
             altroot  用户设置的“替换根目录” -- 再议
 
             dentry结构中有一个d_inode(struct inode)指针,指向记录着文件在
                   存储介质上的位置和分布信息的inode结构体
                   dentry 是逻辑文件
                   inode  是物理文件     所以多个dentry指向一个inode
         */
        struct dentry *root, *pwd, *altroot;
 
 
        /*
             对应着上三个结构
         */
        struct vfsmount *rootmnt, *pwdmnt, *altrootmnt;
     }
 
   */
   struct fs_struct *fs;//文件系统信息,全局的,与具体文件无关
  
   /*
       files_struct 主体是一个file结构数组
       每打开一个文件,进程就通过一个fid访问,fid实际是相应file 结构在数组中的下标
       每个file结构中
          f_op   指向该文件所属文件系统的file_operation
          f_dentry  指向该文件的dentry
   */
   struct files_struct *files;//已打开的文件的信息
}
 
 
---------------------
 
inode结构体
 
 
每个inode都有
       一个“i节点号”i_ino,同一文件系统中唯一
       一个“文件主”,为创建文件的用户,可改变 -- 系统每个用户都有一个uid标识,都属于一个组gid,所以inode也有两个对应i_uid、i_gid字段
       两个设备号  i_dev  除特殊文件外,一个索引节点总需存在在某个设备上,即i_dev
                 i_rdev  若索引节点达标的是某个设备(即不是常规文件),则需另一个设备号i_rdev
                (主设备号、次设备号)
       i_link  文件链接数,即文件别名数
       i_count [动态]文件共享计数
阅读(977) | 评论(0) | 转发(0) |
0

上一篇:[linux] socket

下一篇:[linux] 系统调用

给主人留下些什么吧!~~