kernel module编程(八) 读取proc文件之seq file

本文介绍了如何使用seq_file在Linux内核模块中创建和读取proc文件,以替代read_proc方法。seq_file提供了更安全和规范的方式来处理大量数据的读取,避免了多次读取时的信号量混乱问题。文章详细阐述了seq_file的四个操作步骤:建立proc文件、关联proc文件操作、定义seq_file操作和处理seq_file操作过程。示例代码展示了如何创建、打开、读取和关闭proc文件,以及seq_file的相关函数实现。
摘要由CSDN通过智能技术生成
               

  本文也即《Linux Device Drivers》,LDD3的第四章Debuging Techniques的读书笔记之三,但我们不限于此内容。

  在上次我们使用了read_proc的方式通过/proc文件读取kernel module的信息。作者给的例子他自己说是ugly。而我们在读取大量数据时发现,受到用户buffer大小的限制(page的大小),可能需要读取多次,不仅需要记录上次读取的位置,而且由于每次读取我们申请了信号量,读取完释放,那么如果多次读取的间隔中,如果信号量被写所获取就好出现混乱。linux kernel提供seq_file更好的方式来解决这个问题,除非我们确定读取的信息量非常少,能够在page中返回,我们应使用seq_file的方式而不是read_proc 。

  LDD3中介绍的方式,我觉得是典型的西方人和中国人思维方式的不同。在seq_file的介绍中,LDD3先从每个操作具体将其,然后到如何和proc文件联系,最后到如何创建proc文件,我喜欢反过来的方式,先创建proc,在一步步细化。老外是日月年,我们是年月日,嘿嘿。seq_file的处理方式开看有点发展,步骤有些多,但是安全,是规范的处理方式。

步骤一:建立proc文件。

  通过一个struct proc_dir_entry的元素,在/proc中建立文件,如下:

struct proc_dir_entry * entry = create_proc_entry(“scullseq”,0,NULL)。参数的内容和read_proc,第一个参数表示文件名,第二个参数表示文件属性,对于只读方式为0,第三个参数表示文件路径,NULL表示缺省路径,即/proc。

步骤二:关联proc的操作。

   需要对文件进行操作,见过文件和struct file_operations相关联,我们注意到这个数据结构也用于模块操作关联中。具体操作如下:

#ifdef SCULL_SEQ_FILE            
/* 步骤二:2、定义proc文件所关联的文件操作数据 */            
static struct file_operations scull_proc_ops = { 
        .owner  = THIS_MODULE,  
        .open    = scull_proc_open,  //open通常这是我们唯一需要重新定义的函数,需要和特定的seq_file关联起来。             
        .read     = seq_read,               //采用系统的处理方式             
        .llseek   = seq_lseek,              //采用系统的处理方式             
        .release = seq_release,         //采用系统的处理方式             
};

/* 步骤二:4、在前面的步骤二

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值