




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Good is good, but better carries it.精益求精,善益求善。Linux文件名到索引节点的查找案例分析文件名到索引节点的查找一,总体过程:_user_walk()首先调用path_init()查找文件绝对路径名或相对路径名的搜索起点的根目录或当前目录,接着调用path_walk()在目录项内得到对应的索引节点。二,代码分析,详细原理:/*参数:name:指向在用户空间中的路径名flags:用来指示怎样寻找目标的标志位nd:nameidata结构用于在路径查找过程中记录中间信息和查找结果structnameidatastructdentry*dentry;struc
2、tvfsmount*mnt;structqstrlast;unsignedintflags;intlast_type;*/int_user_walk(constchar*name,unsignedflags,structnameidata*nd)char*tmp;interr;tmp=getname(name);/*通过getname()在系统空间中分配一个页面,从用户空间把文件名name复制到这个页面中,并把分配的页面的路径名赋给tmp*/err=PTR_ERR(tmp);/*强制转换tmp为long,用来判断函数的返回值是否是一个有效的指针,指针有三种情况,一种是有效指针,一种是NULL,
3、空指针,一种是错误指针,或者说无效指针,就是指其已经到达了最后一个page.内核空间最高地址0 xffffffff,那么最后一个page就是指的0 xfffff0000 xffffffff(4k一个page)*/if(!IS_ERR(tmp)/*getname()返回有可能是一个分配的页面的首地址:通过PTR_ERR()将这个指针类型的地址转化为一个整型,再通过IS_ERR()判断是否是一个有效的页面首地址;若getname()返回时错误码情况,ENOMEM定义值是12,经过ERR_PTR(-ENOMEM)返回成了指针类型,指向0 xFFFFFFF4,指向虚拟内核空间的top4KB空间,通过I
4、S_ERR()判断返回的是false*/err=0;if(path_init(tmp,flags,nd)/*若返回1,则完成对路径的搜索工作,即对nameidata结构的初始化完成,此时nameidata结构中的指针dentry指向路径搜索的起点*/err=path_walk(tmp,nd);/*通过path_walk()顺着路径名的指引进行搜索,找到索引节点*/putname(tmp);/*通过putname()释放之前动态分配的空间*/returnerr;intpath_init(constchar*name,unsignedintflags,structnameidata*nd)nd-l
5、ast_type=LAST_ROOT;/*将nameeidata结构中的last_type字段设置成LAST_ROOT,在搜索的过程中,这个字段的值会随着路径名的当前搜索结果而变。例如当成功地找到目标文件,会变成LAST_NORM;当最后停留在一个“.”上,则变成LAST_DOT*/nd-flags=flags;/*标志位*/if(*name=/)/*路径名若是以“/”开头,则说明给出的是绝对路径,需要通过walk_init_root()从根节点开始查找*/returnwalk_init_root(name,nd);/*“替换”根目录,完成工作:当前进程的进程控制块中有个指针fs指向一个fs_
6、struct结构,其中有个指针pwd(即current-fs-pwd指向“当前工作目录”的dentry,将nameidata中的指针dentry指向这个dentry,同理nameidata中的指针mnt指向这个vfsmount*/*此时已经是(或转换成)相对路径,要从当前进程环境中取出当前目录的dentry,及mnt*/read_lock(¤t-fs-lock);/*上锁状态*/nd-mnt=mntget(current-fs-pwdmnt);/*与下面的dentry操作类似*/nd-dentry=dget(current-fs-pwd);/*调用dget()增添共享计数(因为dentry多了一个“用户”)*/read_unlock(¤t-fs-lock);/*解锁状态*/return1;三,流程图:getname()返回值是否有效强制转换getname()返回值调用getname()分配页面否是调用path_init()搜索根目录成功?否调用path_walk()查找索引节点是_user_walk流程图路径名是否
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车抵押销售合同
- 苏教版四年级数学下学期期末学业质量监测复习年级联考习题
- 舞蹈教室服务运营四季度安全事故应急预案
- 医学信息行业安全事故应急预案
- 2024年小学班主任学期工作个人总结
- 电信运营四季度安全事故应急预案
- 道路施工安全生产培训实施
- 2025年高中美术教师下学期个人工作计划
- 二零二五年度房屋退租及装修补偿协议
- 二零二五年度大数据分析服务人员劳动合作书
- 《食品安全抽样检验工作规范》附件文书2024
- 《数据库应用基础(Access 2010)》中职全套教学课件
- 2024儿童青少年抑郁治疗与康复痛点调研报告 -基于患者家长群体的调研
- 芜湖2024年安徽芜湖传媒中心招聘编外工作人员5人笔试历年典型考题及考点附答案解析
- AED使用指南课件
- JT-T-445-2021汽车底盘测功机
- 医疗场所消防安全检查
- 江苏省建筑与装饰工程计价定额(2014)电子表格版
- 我画的动漫形象说课
- 会计科研方法与研究前沿
- 东北三省三校2024年高三二模(第二次联合模拟考试)英语试卷(含标准答案)
评论
0/150
提交评论