自动注册/proc文件

来源:互联网 发布:ubuntu卸载samba 编辑:程序博客网 时间:2024/06/12 00:32
typedef struct proc_private_data_s {    void *data;    unsigned char type;} proc_private_data_t;enum {    INT_TYPE,    STRING_TYPE,    MAX_TYPE};void proc_show_int_private_data(struct seq_file *m, proc_private_data_t * private_data){    seq_printf(m, "%d\n", *((int*)private_data->data));}void proc_show_str_private_data(struct seq_file *m, proc_private_data_t * private_data){    seq_printf(m, "%s\n", (char *)private_data->data);}typedef void (*proc_show_func)(struct seq_file *m, proc_private_data_t *private_data);proc_show_func proc_show_arrays[] = {    proc_show_int_private_data,   /*INT_TYPE*/    proc_show_str_private_data    /*STRING_TYPE*/};static int proc_seq_show(struct seq_file *m, void *v)  {      proc_private_data_t *private_data = (proc_private_data_t *)m->private;    if (private_data->type < MAX_TYPE)        proc_show_arrays[private_data->type](m, private_data);    return 0; //!! must be 0, or will show nothing T.T  }static int proc_seq_open(struct inode *inode, struct file *file){    return single_open(file, proc_seq_show, PDE_DATA(inode));}static struct file_operations proc_file_ops =   {      .owner      = THIS_MODULE,      .open       = proc_seq_open,      .read       = seq_read,      .llseek     = seq_lseek,      .release    = seq_release,  }; int register_proc_file(struct proc_dir_entry *parent, const char *proc_file, proc_private_data_t *data){    struct proc_dir_entry *file;    file = proc_create_data(proc_file, 0, parent, &proc_file_ops, data);    if (file == NULL) {        printk("Can't create proc file %s\n", proc_file);        return -1;    }    return 0;}EXPORT_SYMBOL(register_proc_file);
原创粉丝点击