2.6驱动移植系列之support_interfaces(2)-seq_fi..
时间:2007-05-15 来源:lanttor.guo
seq_file接口的实现,引入了对象、迭代子等概念,这类似于C++中的泛型技术
如果对泛型技术有一定的了解,则会对seq_file接口的理解有一定的帮助 下面是原文的实例代码,略作注释:
/*
#include <linux/init.h>
MODULE_AUTHOR("Jonathan Corbet");
/* 使用seq_file接口,需要实现4个函数:start()、next()、stop()、show(),这4个函数用于对设备的输出信息的迭代访问(控制)*/
/*start()函数,用于设置访问设备的起始位置;本示例的设备位置的含义与proc文件的偏移量相同;返回值作为迭代子*/ /*next()函数,用于实现迭代子的访问步长,本示例的步长是偏移量递加,每次加1;返回值是新的迭代子*/
static void *ct_seq_next(struct seq_file *s, void *v, loff_t *pos) /*stop()函数,完成一些清理函数*/
static void ct_seq_stop(struct seq_file *s, void *v)
/*
/*show()函数,用于向proc文件输出设备需要输出的信息;本示例中仅输出迭代子的序列号*/
/*
/*seq_file接口的函数操作集*/
/*proc接口的open方法实现,open()函数将proc文件与seq_file接口的函数操作集关联起来*/
static int ct_open(struct inode *inode, struct file *file)
/*
/*proc接口的函数操作集,除open方法外,其他方法不需要实现,已经由seq_file的内部代码实现完毕*/ /*模块初始化,创建proc文件*/
static int ct_init(void)
entry = create_proc_entry("sequence", 0, NULL); /*模块注销,删除所创建的proc文件*/
static void ct_exit(void)
module_init(ct_init); |