seq_file的用法

原创 2012年03月29日 20:44:44

/*

初始化代码

*/

entry = create_proc_entry(cache_file_path, 0, NULL);

if (entry) {

entry->proc_fops = &flashcache_cache_operations;

entry->data = dmc;

}

kfree(s);


/*

销毁函数代码

*/

remove_proc_entry(cache_file_path,NULL);

kfree(s);



简单的方式single_open

static int

flashcache_version_show(struct seq_file*seq, void *v)

{

seq_printf(seq, "FlashcacheVersion : %s\n", flashcache_sw_version);

#ifdef COMMIT_REV

seq_printf(seq, "git commit:%s\n", COMMIT_REV);

#endif

return 0;

}


static int

flashcache_version_open(struct inode*inode, struct file *file)

{

return single_open(file,&flashcache_version_show, PDE(inode)->data);

}


static struct file_operationsflashcache_version_operations = {

.open = flashcache_version_open,

.read = seq_read,

.llseek = seq_lseek,

.release = single_release,

};

优缺点:

这种方法的好处就在于简单,但是经过测试在一个show函数里的seq_printf会先输出到seq_filebuff里面,当输出数据过大的时候很出现缓冲区溢出的错误,导致cannotallocate memory的错误。


复杂的方式seq_open

/*

如果当前迭代位置超过了列表的边界,则返回NULL

*/

static void*flashcache_cache_start(struct seq_file *seq, loff_t *pos)

{

struct cache_c *dmc = seq->private;


if(*pos >= (dmc->num_sets *dmc->assoc)) {

return NULL;

}

return &dmc->cache[*pos];

}

/*

如果当前迭代位置超过了列表的边界,则返回NULL

*/

static void*flashcache_cache_next(struct seq_file *seq, void *v, loff_t *pos)

{

struct cache_c *dmc = seq->private;

(*pos)++;

if(*pos >= (dmc->num_sets *dmc->assoc)) {

return NULL;

}

return &dmc->cache[*pos];

}

static voidflashcache_cache_stop(struct seq_file *seq, void *v)

{

}

/*

如果该函数输出的数据较少,则返回到next函数中继续迭代。当show函数产生一定数量的输出之后,迭代进入到start函数中。当nextstart函数中有一个返回NULL,则迭代停止

*/

static int flashcache_cache_show(structseq_file *seq, void *v)

{

struct cacheblock *cache = (structcacheblock *)v;


if(cache->cache_state & VALID){

seq_printf(seq, "%llu ",(u_int64_t)cache->dbn);

}

return 0;

}


static struct seq_operationsflashcache_cache_seq_ops = {

.start = flashcache_cache_start,

.next = flashcache_cache_next,

.stop = flashcache_cache_stop,

.show = flashcache_cache_show,

};


/*

在这里设置seq_fileprivateprivate作为私有成员在迭代中传递

*/

static int

flashcache_cache_open(struct inode*inode, struct file *file)

{

struct seq_file *seq;

int ret;

ret = seq_open(file,&flashcache_cache_seq_ops);

if(ret) {

return ret;

}

seq = (struct seq_file*)file->private_data;

seq->private = PDE(inode)->data;


return 0;

}


static struct file_operationsflashcache_cache_operations = {

.open = flashcache_cache_open,

.read = seq_read,

.llseek = seq_lseek,

.release = seq_release,

};


参考文献


序列文件(seq_file)接口

序列文件(seq_file)接口 2009-09-28 11:01 93人阅读 评论(0) 收藏 举报 内容简介: 本文主要讲述序列文件(seq_file)接口的内核实现,如何使用它...
  • gangyanliang
  • gangyanliang
  • 2012年02月09日 10:49
  • 4293

Linux内核学习笔记之seq_file接口创建可读写proc文件

学习笔记与个人理解,如有错误,欢迎指正。 温馨提示:建议跟着注释中的编号顺序阅读代码 测试方法:cat /proc/abc_proc                    echo 任意字符串 >/...
  • mumufan05
  • mumufan05
  • 2015年05月17日 23:56
  • 4618

seq_file文件的内核读取过程

转载自:seq_file文件的内核读取过程 在此表示感谢! 1 问题 seq_file只是在普通的文件read中加入了内核缓冲的功能,从而实现顺序多次遍历,读取大数据量的简单接口。seq_file一...
  • wuyinghao59
  • wuyinghao59
  • 2017年10月13日 17:33
  • 134

linux设备驱动学习笔记--内核调试方法之proc(补充seq_file)

上一节中的proc实现对于开关文件,控制文件,以及显示很少信息的文件来说还是比较简单的,但是对于需要输出大量信息像meminfo,或者结构化的信息像cpuinfo等时就会显得很笨拙,并且代码也很不好理...
  • ITsenlin
  • ITsenlin
  • 2015年02月01日 23:11
  • 3834

seq_file文件的内核读取过程

seq_file文件的内核读取过程 1 问题 seq_file只是在普通的文件read中加入了内核缓冲的功能,从而实现顺序多次遍历,读取大数据量的简单接口。seq_file一般只提供只读接...
  • coldsnow33
  • coldsnow33
  • 2014年08月27日 19:01
  • 802

seq_file文件的内核读取过程

FROM:http://www.cnblogs.com/Wandererzj/archive/2012/04/16/2452209.html seq_file文件的内核读取过程 1 问...
  • LBO4031
  • LBO4031
  • 2012年11月12日 20:20
  • 4454

HADOOP测试常见问题和测试方法

随着分布式计算技术的推广,越来越多的大数据计算任务迁移到hadoop平台上进行,模型类的hadoop应用也越来越多。经过这一段时间在hadoop上的测试项目,在此简单分享下hadoop上项目测试的经验...
  • mvpme82
  • mvpme82
  • 2013年03月29日 11:30
  • 1127

将本地文件读成sequenceFile文件,处理海量小文件的一种方式

个人观点:当处理海量小文件时,先将小文件进行sequenceFile操作或者类似操作处理,然后再上传到HDFS系统进行下一步的处理。(如有其它建议,欢迎留言)   一、直接上传本地栅格数据将导致的...
  • gywtzh0889
  • gywtzh0889
  • 2017年07月19日 15:31
  • 385

linux 读取proc文件之seq_file浅析1

在linux中通过proc文件系统
  • zhanshenwu
  • zhanshenwu
  • 2014年04月26日 23:52
  • 1484

seq_file

序列文件(seq_file)接口2009-06-09 15:02内容简介:本文主要讲述序列文件(seq_file)接口的内核实现,如何使用它将Linux内核里面常用的数据结构通过文件(主要关注proc...
  • yjq_850111
  • yjq_850111
  • 2011年05月21日 06:14
  • 227
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:seq_file的用法
举报原因:
原因补充:

(最多只允许输入30个字)