Chinaunix首页 | 论坛 | 博客
  • 博客访问: 139452
  • 博文数量: 83
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 660
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-04 22:51
文章分类

全部博文(83)

文章存档

2009年(83)

我的朋友
最近访客

分类: LINUX

2009-05-05 13:05:51

2.4内核

struct nameidata {

    struct dentry *dentry;

    struct vfsmount *mnt;

    struct qstr last;

    unsinged int flags;

    int last_type;

};  //用于在根据路径名找目标节点时,返回搜索结果.

 

struct qstr {

   const unsigned char *name;

   unsigned int len;

   unsigned int hash;

};   //用来存放路径名中当前节点的名,长度.

 

struct dentry {

       atomic_t d_count;        /* 目录项引用计数器 */

       unsigned int d_flags;    /* 目录项标志 */

       struct inode  * d_inode;   /* 与文件名关联的索引节点 */

       struct dentry * d_parent;       /* 父目录的目录项 */

       struct list_head d_hash;        /* 目录项形成的哈希表 */

       struct list_head d_lru;         /*未使用的 LRU 链表 */

      struct list_head d_child;       /*父目录的子目录项所形成的链表 */

     struct list_head d_subdirs;     /* 该目录项的子目录所形成的链表*/

     struct list_head d_alias;       /* 索引节点别名的链表*/

     int d_mounted;                  /* 目录项的安装点 */

     struct qstr d_name;             /* 目录项名(可快速查找) */

     unsigned long d_time;           /* d_revalidate函数使用 */

     struct dentry_operations  *d_op; /* 目录项的函数集*/

     struct super_block * d_sb;      /* 目录项树的根 (即文件的超级块)*/

     unsigned long d_vfs_flags;  

     void * d_fsdata;                /* 具体文件系统的数据 */

     unsigned char d_iname[DNAME_INLINE_LEN]; /* 短文件名 */

};

 

struct file

{

 struct list_head        f_list;   /*所有打开的文件形成一个链表*/

 struct dentry           *f_dentry; /*指向相关目录项的指针*/

 struct vfsmount         *f_vfsmnt; /*指向VFS安装点的指针*/

 struct file_operations  *f_op;     /*指向文件操作表的指针*/

  mode_t f_mode;                        /*文件的打开模式*/

  loff_t f_pos;                         /*文件的当前位置*/

   unsigned short f_flags;              /*打开文件时所指定的标志*/

   unsigned short f_count;              /*使用该结构的进程数*/

   unsigned long f_reada, f_ramax, f_raend, f_ralen, f_rawin;

   /*预读标志、要预读的最多页面数、上次预读后的文件指针、预读的字节数以及 预读的页面数*/

  int f_owner;                 /* 通过信号进行异步I/O数据的传送*/

  unsigned int         f_uid, f_gid;  /*用户的UIDGID*/

  int                 f_error;       /*网络写操作的错误码*/

 

  unsigned long f_version;           /*版本号*/

   void *private_data;                      /* tty驱动程序所需 */

 

};

 //描述文件读写的上下文

 

 

struct files_strcut {

         atomic          count;

         rwlock_t   file_lock;

         int               max_fds; //当前file结构指针数组的容量

         int               max_fdset; //当前file结构位图的容量

         int               next_fd;

         struct file   **fd;

         fd_set      *close_on_exec;

         fd_set          *open_fds;

         fd_set      close_on_exec_init;

         fd_set      open_fds_init;

         struct file   *fd_array[NR_OPEN_DEFAULT];

}; //保存打开文件有关的信息

 

struct vfsmount

{

        struct list_head mnt_hash;

        struct vfsmount *mnt_parent;    /* fs we are mounted on */

        struct dentry *mnt_mountpoint;  /* dentry of mountpoint */

        struct dentry *mnt_root;        /* root of the mounted tree */

         struct super_block *mnt_sb;     /* pointer to superblock */

         struct list_head mnt_mounts;    /* list of children, anchored here */

         struct list_head mnt_child;     /* and going through their mnt_child */

         atomic_t mnt_count;

        int mnt_flags;

         char *mnt_devname;              /* Name of device e.g. /dev/dsk/hda1 */

         struct list_head mnt_list;

};

 

阅读(424) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~