LDD: ch4补充,seq_file的介绍

总结自linux下的seq_file.txt的document。

虚拟文件系统如procfs,debugfs等在建立虚拟文件的时候,都要设计到虚拟文件的操作。
使用虚拟文件的时候比较挑战的一点在于,当虚拟文件相当大的时候,操作虚拟文件需要一些技巧,在多次读写的时候要小心的操作文件的position,当虚拟文件的使用越来越广泛的时候,这样的操作代码也越来越多,因此在2.6内核中加入了一组函数来方便实现虚拟文件的操作,这就是seq_file。


1. seq_file

seq_file声明在

1.1 seq_file的iterator接口

希望使用seq_file接口的模块都必须要要实现iterator对象来遍历虚拟文件的数据。
iterator接口包含4个函数需要实现用于遍历:

struct seq_operations {
    void * (*start) (struct seq_file *m, loff_t *pos);
    void (*stop) (struct seq_file *m, void *v);
    void * (*next) (struct seq_file *m, void *v, loff_t *pos);
    int (*show) (struct seq_file *m, void *v);
};
1.1.1 start接口

start接口接受一个pos作为起始位置,并且返回一个iterator指针。对于一个顺序访问的虚拟文件来说,最简单的start函数可能如下:

static void *ct_seq_start(struct seq_file *s, loff_t *pos)
{
        loff_t *spos = kmalloc(sizeof(loff_t), GFP_KERNEL);
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值