免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1705 | 回复: 3

【求助】关于内核基于分页机制读取文件时读取最后一页的问题 [复制链接]

论坛徽章:
0
发表于 2009-06-07 08:37 |显示全部楼层
1
假设一个文件是5000字节,前4096字节用一个页读取后,剩下的4字节用第二页读取,但剩下的第二页中那4092字节填充什么呢?

2
另外,内核通过哪个成员变量来确定最后一页里有效数据(那4kb)的偏移量?
是用宏bio_offset么,但它里面的参数是bio,不是page啊

3
在读取文件时,每个page的数据来自哪个路径下的哪个文件,是如果判断的呢?
文件名是否是 结构体file指向的 file->f_dentry->d_name.name?

4
在mpage_end_io_read函数中,struct bio_vec *bvec = bio->bi_io_vec + bio->bi_vcnt - 1;
bvec是先指向最后一个bio_vec,然后再--bvec,不明白这样做是为什么?


多谢指教~~

[ 本帖最后由 kenokanza 于 2009-6-7 23:54 编辑 ]

论坛徽章:
2
申猴
日期:2013-12-26 22:11:31天秤座
日期:2014-12-23 10:23:19
发表于 2009-06-07 08:59 |显示全部楼层
1,其他4092用null来填充
2,偏移可以用一段程序来得出
ext2,ext3,minix文件系统中都有

  1. static unsigned minix_last_byte(struct inode *inode, unsigned long page_nr){
  2.          unsigned last_byte = inode->i_size;

  3.         last_byte -= page_nr << PAGE_CACHE_SHIFT;
  4.          if (last_byte > PAGE_CACHE_SIZE)
  5.                  last_byte = PAGE_CACHE_SIZE;
  6.          return last_byte;
  7. }
复制代码

论坛徽章:
0
发表于 2009-06-07 22:50 |显示全部楼层
“假设一个文件是5000kb,前4096kb用一个页读取后,剩下的4kb用第二页读取,但剩下的第二页中那4092kb填充什么呢?”
这一句里的所有K都应该去掉才对。

论坛徽章:
0
发表于 2009-06-07 23:45 |显示全部楼层

回复 #3 accessory 的帖子

是是,马虎了,不好意思
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP