当前位置:  技术问答>linux和unix

vfs中inode结构的i_size是什么意思

    来源: 互联网  发布时间:2016-04-13

    本文导语:  (i_size - 1) >> PAGE_CACHE_SHIFT last_block = (i_size - 1) >> blkbits; 看内核源码文件读写的时候,常看到上面这样的表达式,我不明白是什么意思,i_size应该是文件的大小,右移相应位以后应该是什么呢?右移以后代表什么意思呢...


(i_size - 1) >> PAGE_CACHE_SHIFT

last_block = (i_size - 1) >> blkbits;

看内核源码文件读写的时候,常看到上面这样的表达式,我不明白是什么意思,i_size应该是文件的大小,右移相应位以后应该是什么呢?右移以后代表什么意思呢?谢谢大家。我是初学者。请帮忙。

|
i_size -1 的目的是为了得到从0开始的编号!

打个比方,如果刚好 i_size = PAGE_CACHE_SHIFT,那么用i_size >> PAGE_CACHE_SHIFT,得到的是1,而事实上i_size = PAGE_CACHE_SHIFT,一共只有一个PAGE, 所以得到的最后一个PAGE的编号(从0开始)应该是0;所以用了一个简单的编程技巧来得到从0开始的编号:就是(i_size-1) >> PAGE_CACHE_SHIFT;

为什么偏偏是-1,而不是-2,-3,-4 ...呢?

那时因为如果i_size = PAGE_CACHE_SHIFT+1,按上面的公式,最后一个PAGE的编号应该是1(该PAGE的实际大小就是1个字节),如果用 -2, -3, -4 ... 那么得到的最后一块的PAGE编号就变成了0,这和事实不符合!


够罗嗦的了,希望楼主能够明白,其实自己多想想就明白这个道理了。

Good Luck!  

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • VFS开源框架 TinyVFS
  • 视频文件系统 56vfs
  • 虚拟文件系统(VFS),大家了解么?
  • 高分悬赏关于hack AIX5.3 vfs 文件系统操作
  • 求教vfs_readdir的问题
  • VFS: file_max limit 4096 reached
  • 新手求问:No package 'gnome-vfs-2.0' found 怎么办?
  • 挂载文件系统失败:VFS : unable to mount root fs on 03:01
  • 重新配置内核时出现:::VFS:unable to mount root fs on
  • 在jb6里面一个jsp工程,本来好好,今天一来,编译变成了vfs://host:0/file:///F:/MobileFrameJSP/defaultroot/MainJsp.jsp
  • 高手来救人啊~~Kernel panic: VFS: Unable to mount root fs on unknown-block(0,0)
  • Commons-VFS
  • Kernel panic-not syncing:VFS:Unable to mount root fs on Unknown-block(0,0)
  • 重新编译内核启动后报错Kernel Panic on VFS: Unable to mount root fs on unknown-block(0,0)
  • linux内核升级问题:Kernel panic: VFS Unable to mount root fs on unknown-block(8-3)
  • 新手请教关于由 VFS引起的Kernel panic问题
  • linux内核升级出现错误:vfs cannot open root device sda2 or unknown-block 0 0
  • 请教大家为什么我的uclinux无法挂载根文件系统?Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3