从seq_file接口读取的数据不全

原创 2012年03月21日 20:53:33

好久没写博客了。每当一天过去感觉毫无收获,工作内容无趣,或者觉得做这些事完全是浪费时间时,就会想通过某种方式督促自己有所总结,重新思考学习方式,改变学习策略。总之,在工作内容很不乐观的情况下,维持原状是最坏的选择。应急而变,多试一下学习方法与模式,一来调节下当前状态,二来后续若再遇此境,转变也会来的及时。


标题所述的事已经是一个月前遇到的了。彼时的任务只是从内核态导出一些数据。seq_file大名早有耳闻,难得有此机会,何不使用一番?


虽说这东西很早就知道了,却一直懒于思考其原理。在工作环境中用了,思考的驱动力自然要大一些。好在东西并不复杂,尝试几番,很快就实现了功能。本以为事情至此便结束,不料几天以后,发现数据总是读少了。这还不一定是seq_file的原因,说不定是内核生成的数据少了。几经排查,问题确实出在seq_file接口上。稀奇的是,用cat读到的和用dd读到的数据数量居然不一样。就算是用dd,设置不同的bs,得到的结果也不尽相同。要求交差日期逼进,使用陌生接口带来的窘境立马显现了出来。顶着压力看代码确实不是滋味。好在后来需求变化,这个东西最终没有用上场。


可是问题仍未解决。没有工作的压力,自己又懒得去研究其中的细节。话说回来,也没“要使用接口先看懂接口实现”这种事。虽然心里有一丝放不下,此事最终还是过去。不得不感叹工作以后,激情骤减,毅力全无。若是一年前还在校园时,必然会全力搞懂细节。现在却感觉这样做很累。这种转变,也才发生在不一年之内。


一次在网吧下东西,闲来无事,想起了这个东西。这种情况已经发生太多次了,以前这种时候是玩ZUMA,后来腻了,碰到这种时候就看资料。我记得在这种情形下看过USB spec,USB Mass Storage spec,这一次,自然是研究seq_file。


在lxr上看了半天,大致找到了原因。seq_start'的时候返回第一个object,我采用的策略是:如果内部的一个index为0就返回处一个object,不然返回NULL。背后的想法是,我不打算支持seek。看了代码才知道,就没有seek,当seq_file扩大内存时,还会重新调一次seq_start,于是悲剧发生。


找到了这个地方,我又不想往下看了。这东西在工作中也无需再使用,因此也没有验证。但是后来在某份内核文档里看到,因为seq_file实现的原理,dd或者cat可能读不全数据。这让我觉得很稀奇,这难道不是一个BUG?可能seq_file最终就是如此,也有可能文档太老,seq_file初期是如此,后面已经改好了。


虽然最终没有透彻地搞懂,这次经历就当是业余自主学习吧。

序列文件(seq_file)接口

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

从网络接口获取json数据不完全

也就是说当我们从一个接口获取到json数据的时候想打印一下,但是当我们和网页上查看到的内容对比一下会发现(有可能)我们打印的仅仅是前半部分。 可能的原因: * 这当然可能是你没有获取完全 * 我...
  • u014587769
  • u014587769
  • 2016年07月09日 16:01
  • 1089

linux 读取proc文件之seq_file浅析1

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

记录帖(持续更新):httpclient post 读取数据不全的原因汇总

httpclient访问php服务器有可能获取到数据不全(即返回的json格式不完整),通过网络搜索包括项目解决将可能原因汇总如下(只是遇到的和网络上说明的,欢迎大家补充):    1. php服务器...
  • yijianpiaoxue2014
  • yijianpiaoxue2014
  • 2015年10月13日 09:55
  • 2487

elasticsearch的3个基本问题之读取数据

如何从ES读取数据,包括两种方式,直接获取和通过搜索获取 1. 直接获取 GET index/type/ID的方式可以直接获取到某个index下的某个type的,文档ID是ID的doc。e...
  • smithallenyu
  • smithallenyu
  • 2016年04月20日 18:55
  • 567

java读取网络数据流不完整的问题

在用java的socket读取网络数据流的时候,datainputstream read(byte [] b),数据读取不完整,例如有3W的数据,有可能读到2W时read就解除阻塞,这个问题纠结了好久...
  • zhenchentl
  • zhenchentl
  • 2012年05月01日 09:19
  • 3838

seq_file接口

下面是网上的一个测试程序 #include #include #include #include #include MODULE_DESCRIPTION("test proc")...
  • zq5848
  • zq5848
  • 2011年10月08日 22:47
  • 454

从管道中读取数据

   如果管道的写端不存在,则认为已经读到了数据的末尾,读函数返回的读出字节数为0;当管道的写端存在时,如果请求的字节数目大于PIPE_BUF,则返回管道中现有的数据字节数,如果请求的字节数目不大于P...
  • bodajingshen000
  • bodajingshen000
  • 2009年03月24日 14:08
  • 2111

seq_file文件的内核读取过程

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

IOS菜鸟的所感所思(三)——通过服务器接口获取数据

通过服务器接口获取数据,ios
  • MyCodeDancer
  • MyCodeDancer
  • 2015年05月14日 16:52
  • 3761
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从seq_file接口读取的数据不全
举报原因:
原因补充:

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