学习笔记 Linux文件系统实验-打印文件占用的磁盘块

(尚未解决该问题,还在查找资料中)

任务描述:

文件系统实验

实验内容:
(1) 查看当前系统所使用的文件系统的类型及版本号;
(2) 阅读Ext3(或Ext4)文件系统,特别是索引节点相关的源代码。
(3) 为内核添加一个新的系统调用filesys, 其从调用者接收一个磁盘文件的全局路径名,打印该文件占用的所有磁盘块;
(5) 重新编译、安装内核;
(6) 编写用户测试程序,测试filesys系统调用。


解决思路:

*查阅的linux源代码的版本为3.16.39

1、ext4文件系统种inode的定义位置:ext4.h/ext4_inode

参考博客:
ext2/3/4的inode结构说明
http://www.cnblogs.com/liuxuzzz/p/5348545.html

2、
可以看到inode的定义中有这样一行:

__le32  i_block[EXT4_N_BLOCKS];/* Pointers to blocks */

i_block数组中存放的即为文件所在的磁盘块号。

通过查阅源码可以得到EXT4_N_BLOCKS的大小为15:

默默地想吐槽一句这样+1+1的真不直接......

3、“inode填充可以从inode_operations.lookup看到,比如在ext3文件系统中,ext3_lookup->ext3_iget来填充inode”

“如何填充一个新创建的 inode, 是由具体文件系统提供的函数实现的。
http://www.cnblogs.com/wangzahngjun/p/5365310.html

ext4_lookup中有这样一行:

1413                 inode = ext4_iget_normal(dir->i_sb, ino);

将ext4_inode中的i_block[]填充到vfs的inode中的i_data的代码的位置:

ext4_inode中的i_block[]转换到vfs的inode里的i_data的代码位置如下:
/fs/ext4/inode.c

在这个函数内:

4394 struct inode *ext4_iget(struct super_block *sb, unsigned long ino)
4509         /*
4510          * NOTE! The in-memory inode i_data array is in little-endian order
4511          * even on big-endian machines: we do NOT byteswap the block numbers!
4512          */
4513         for (block = 0; block < EXT4_N_BLOCKS; block++)
4514                 ei->i_data[blo
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值