免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2371 | 回复: 6
打印 上一主题 下一主题

内核态文件读取的问题[已解决] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-02 19:40 |只看该作者 |倒序浏览
本帖最后由 crazyhadoop 于 2011-11-12 07:56 编辑

版主不好意思,刚才我发过这么一个贴子,但让我自己给搞乱, 所以重新发一次。。

问题是,我在内核中用如下程序去读一个文件,结果却比预期的内容多了一些莫名其妙的东西

我想要的是文件中仅有的64字节的内容,结果却不是 , 求解释。
  1. int kreadf(char str[], int n)
  2. {
  3.         struct file *filp;
  4.         mm_segment_t old_fs;
  5.         ssize_t rlen;
  6.         char *buffer;

  7.         filp = filp_open(opt_file, O_RDONLY, 0);
  8.         if(IS_ERR(filp)){
  9.                 printk(KERN_EMERG"open file erro\n");
  10.                 return 1;
  11.         }
  12.         old_fs = get_fs();
  13.         set_fs(KERNEL_DS);
  14.         buffer = kmalloc(64, GFP_KERNEL);
  15.         rlen = filp->f_op->read(filp, buffer, 64, &filp->f_pos);
  16.         memcpy(str, buffer ,64);
  17.         printk(KERN_EMERG"size of string: %d\n", strlen(buffer));
  18.         printk(KERN_EMERG"buffer: %s\n", buffer);
  19.         printk(KERN_EMERG"size of string: %d\n", strlen(str));
  20.         printk(KERN_EMERG"get str: %s\n", str);
  21.        
  22.         filp_close(filp, NULL);
  23.         set_fs(old_fs);
  24.         return 0;       
  25. }
复制代码
运行的结果如下,预期的内容是0BEC2A3E392E2C353DF6C79860B17700DDDBB13051C0505FE17C0C27BD037983
:[code]Message from syslogd@ at Thu Nov  3 02:33:43 2011 ...
localhost kernel: size of string: 76

Message from syslogd@ at Thu Nov  3 02:33:43 2011 ...
localhost kernel: buffer: 0BEC2A3E392E2C353DF6C79860B17700DDDBB13051C0505FE17C0C27BD037983J

论坛徽章:
0
2 [报告]
发表于 2011-11-02 19:42 |只看该作者
为什么结果还是显示不全呢。。


Message from syslogd@ at Thu Nov  3 02:33:43 2011 ...
localhost kernel: size of string: 76

Message from syslogd@ at Thu Nov  3 02:33:43 2011 ...
localhost kernel: buffer: 0BEC2A3E392E2C353DF6C79860B17700DDDBB13051C0505FE17C0C27BD037983J

论坛徽章:
0
3 [报告]
发表于 2011-11-02 22:58 |只看该作者
为什么没人解答呢?

论坛徽章:
0
4 [报告]
发表于 2011-11-09 22:58 |只看该作者
已经解决了,  问题出来buffer上, 用memset(buffer, 0, sizeof(buffer))就可以了。

挺基础的一个问题,我说怎么没人回答呢。。

论坛徽章:
0
5 [报告]
发表于 2011-11-09 23:57 |只看该作者
看看了!!!!!!!!!!

论坛徽章:
2
技术图书徽章
日期:2015-12-16 09:12:1619周年集字徽章-庆
日期:2019-09-12 16:09:19
6 [报告]
发表于 2011-11-10 16:13 |只看该作者
已经解决了,  问题出来buffer上, 用memset(buffer, 0, sizeof(buffer))就可以了。

挺基础的一个 ...
soulfy 发表于 2011-11-09 22:58



    哈哈,粗心大意.
不過我也經常這樣!

论坛徽章:
0
7 [报告]
发表于 2011-11-10 16:51 |只看该作者
回复 6# lexken


    嗯, 这个还得多注意,养成好的编程习惯! 呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP