免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: wokao112358
打印 上一主题 下一主题

[文件系统] kernel中读取文件,只读取到文件部分内容(前1013个字节) [复制链接]

论坛徽章:
0
11 [报告]
发表于 2013-11-27 10:22 |只看该作者
配置文件由于保密问题没法上传。。。
read返回值是文件的长度;
我一次读取了buf中的每个字节,发现只有buf最后一个字节是‘\0’;
但是打印的时候确实没有打印完全。回复 6# firkraag


   

论坛徽章:
0
12 [报告]
发表于 2013-11-27 10:23 |只看该作者
这个可以确定的;
read返回值是文件的长度;
我依次读取了buf中的每个字节,发现只有buf最后一个字节是‘\0’;
但是打印的时候确实没有打印完全。
回复 10# asuka2001


   

论坛徽章:
0
13 [报告]
发表于 2013-11-27 10:25 |只看该作者
本帖最后由 wokao112358 于 2013-11-27 10:31 编辑

1、 read返回值是文件的长度;
2、read结束的条件就是入参fsize或者读到文件末尾,可以这么理解吧?
3、我依次读取了buf中的每个字节,发现只有buf最后一个字节是‘\0’;
     我也选取了buf中靠后的一些字节进行打印,发现跟文件内容也是一致的;
但是整个打印buf的时候没有打印完全。
回复 9# Godbach


   

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
14 [报告]
发表于 2013-11-27 10:29 |只看该作者
回复 13# wokao112358

可能和 printk 自身 buffer 有关系。

你这样打印吧,每 1K 字节,调用一次 printk 试试


   

论坛徽章:
0
15 [报告]
发表于 2013-11-27 10:31 |只看该作者
嗯,好的,我先试试你说的这个回复 14# Godbach


   

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
16 [报告]
发表于 2013-11-27 11:32 |只看该作者
回复 12# wokao112358

那问题就是printk了,printk()调用vprintk_emit()

vprintk_emit()
{
        static char textbuf[LOG_LINE_MAX];
        ......
        text_len = vscnprintf(text, sizeof(textbuf), fmt, args);
}
   

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
17 [报告]
发表于 2013-11-27 11:35 |只看该作者
回复 16# asuka2001

只不过为什么是1048个字节我觉得有点奇怪。。。

#define PREFIX_MAX                32
#define LOG_LINE_MAX                1024 - PREFIX_MAX

明显 LOG_LINE_MAX是小于1024字节的。。。


   

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
18 [报告]
发表于 2013-11-27 12:13 |只看该作者
回复 11# wokao112358

printk_buf overflow as asuka2001 said.
   

论坛徽章:
0
19 [报告]
发表于 2013-11-27 20:05 |只看该作者
是我刚发帖的时候搞错了,其实是1013个字节,之前打印的log文件在win下‘0A’被转成了'0D0A',所以字节数变多了;我马上改下帖子回复 17# asuka2001


   

论坛徽章:
0
20 [报告]
发表于 2013-11-27 20:07 |只看该作者
谢谢各位的帮助,我再看看源码!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP