哈工大-操作系统L32

目录解析代码

open_namei(filename,flag,&inode),解析路径

filename,根据文件名把inode弄进来写到&inde上

pathname路径名

if((c=get_fs_byte(pathname))=='/'),如果是'/'就从根目录开始,不是就从当前目录开始

current->root是根目录的inode

由于每次访问都是从根目录开始,父进程也是从根目录开始,子进程是拷贝了父进程所以也是冲根目录开始

根据目录的inode找到根目录里的数据内容,数据内容是一堆目录项,每个目录项是一个文件名字符串加一个文件对应的inode所对应的数组编号

find_entry,从目录中读取目录项

inr=de->inode这一项文件对应的inode编号

iget(idev,inr)把下一层的编号发进来就可以把下一层的inode读进来在循环

init(void)挂载硬盘

mount_root()挂载根目录

iget(ROOR_DEV,ROOT_INO)根据根目录所对应的inode编号找到就可把根目录读进来,ROOT_INO=1.

current->root=mi将根目录的inode读进来

get_supe(inode->dev)获得超级块

block=2+sb->s_imap_blocks+sb->zmap_block+(inodee->i_num-1)/INODES_PER_BLOCK

2,从0开始引导块和超级块各占一块,所以是从2开始

sb->s_imap_blocks,inode位图

sb->s_zmap_block 盘块位图

(inode->i_num-1),要读的 inode编号

(inode->i_num-1)/INODES_PER_BLOCK(一个块有多少个inode) 

break(inode->i_dev,block)去磁盘上读块

hb->data[(inode->i_num-1)%INODES_PER_BLOCK],通过解析把需要的inode从盘上拿出来

find_entry找到目录所对应的编号

int block=(*dir)->i_zone[0]找直接索引块

bread((*dir)->i_dev,block)把块读出来

dir_entry*de=bh->b_date;将数据读进内存缓冲区

if(match(namelen,name,de))然后挨个匹配,能匹配直接返回,不能就继续循环

读取所有目录然后进行比较

  • 12
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值