阅读:1409回复:1
ntfs系统学习(1)
#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。 |
|
|
沙发#
发布于: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; }; |
|
|