cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
阅读:1409回复:1

ntfs系统学习(1)

楼主#
更多 发布于:2007-02-02 20:33
  #define FS_NTFS    1

定义ntfs文件系统操作接口,此处的接口为proc_dointvec :
static ctl_table ntfs_sysctls[] = {
    { FS_NTFS, "ntfs-debug",        
      &debug_msgs,sizeof(debug_msgs),    
      0644,    NULL, &proc_dointvec },        
    { 0 }
};

定义ntfs文件系统的父目录,这里为
static ctl_table sysctls_root[] = {
    { CTL_FS, "fs", NULL, 0, 0555, ntfs_sysctls },
    { 0 }
};

static struct ctl_table_header *sysctls_root_table = NULL;

添加ntfs文件系统
int ntfs_sysctl(int add)
{
    if (add) {
        BUG_ON(sysctls_root_table);

                                //注册文件系统
        sysctls_root_table = register_sysctl_table(sysctls_root, 0);
        if (!sysctls_root_table)
            return -ENOMEM;
#ifdef CONFIG_PROC_FS
        ntfs_sysctls[0].de->owner = THIS_MODULE;
#endif
    } else {
        BUG_ON(!sysctls_root_table);
        unregister_sysctl_table(sysctls_root_table);
        sysctls_root_table = NULL;
    }
    return 0;
}

proc_dointvec 接口并没有直接操作,使用了桥模式,转到do_proc_dointvec接口处理。这是操作系统惯用方式,特别是是加密库部分使用的登封造极,把结构和接口函数结合模式开发形成完美code。
走走看看开源好 Solaris vs Linux
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
沙发#
发布于:2007-02-02 20:49
这是sysctl_table数据结构,并通过ctl_table_header机构把系统中table联系起来
struct ctl_table
{
    int ctl_name;            /* Binary ID */
    const char *procname;        /* Text ID for /proc/sys, or zero */
    void *data;
    int maxlen;
    mode_t mode;
    ctl_table *child;
    proc_handler *proc_handler;    /* Callback for text formatting */
    ctl_handler *strategy;        /* Callback function for all r/w */
    struct proc_dir_entry *de;    /* /proc control block */
    void *extra1;
    void *extra2;
};

/* struct ctl_table_header is used to maintain dynamic lists of
   ctl_table trees. */
struct ctl_table_header
{
    ctl_table *ctl_table;
    struct list_head ctl_entry;
    int used;
    struct completion *unregistering;
};
走走看看开源好 Solaris vs Linux
游客

返回顶部