对/proc编程的一点总结(转载)

类似于驱动程序的开发,注册/proc文件也需要初始化一个数据结构:
struct proc_dir_entry
然后调用static inline struct proc_dir_entry *create_proc_entry(const char *name,     mode_t mode, struct proc_dir_entry *parent) 函数注册proc文件,在卸载模块时,调用 remove_proc_entry(name, parent)宏,注销该proc文件即可。
具体步骤:
1. 声明一个proc_dir_entry结构
2. 调用create_proc_entry注册一个proc_dir_entry结构
3. 填写proc_dir_entry结构的几个关键字段,其中read函数是必填的
4. 注销该proc_dir_entry结构

一个简单的例子:
[code]
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
#include <linux/sched.h>
#include <asm/uaccess.h>

int my_read(char* page,char** start,off_t off,int count,int* eof,void* data)
{
    int len=0;
    char* head=page;
    struct timeval time;
    do_gettimeofday(&time);

    len=sprintf(head,"sec: %d usec: %d/n",time.tv_sec,time.tv_usec);
    page[len]='/0';

    return len;
}

struct proc_dir_entry* proc_file=NULL;

int enter_module(void)
{
    struct timeval time;

    proc_file=create_proc_entry("clock",0664,NULL);
    proc_file->read_proc=my_read;
    proc_file->write_proc=NULL;
    proc_file->owner=THIS_MODULE;

    do_gettimeofday(&time);
    printk("sec: %d  usec: %d/n",time.tv_sec,time.tv_usec);

    return 0;
}

void leave_module(void)
{
    remove_proc_entry("clock",NULL);
    printk("leave clock/n");
}

module_init(enter_module);
module_exit(leave_module);
[/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值