自动注册/proc文件

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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值