版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 软考中级信息系统规划师学习资料试题及答案
- 2026年浙江省嵊州市高考物理周测试卷带答案详解(突破训练)
- 2025年福建省南安市高考物理周测试卷含完整答案详解【夺冠】
- 2026年江西省井冈山市高考物理5月学情自测试卷及完整答案详解1套
- 2025年吉林省桦甸市高考物理5月学情自测考试卷带答案详解(新)
- 2025年江西省丰城市高考物理一轮复习模拟卷(轻巧夺冠)附答案详解
- 2025年黑龙江省肇东市高考物理三轮冲刺模拟卷(精练)附答案详解
- 2026年桂林市叠彩区公务员招聘考试备考试题及答案详解
- 2026北京中国人民大学科学技术发展部招聘2人笔试备考题库及答案详解
- 2026广东佛山市交通科技有限公司博士后科研工作站(分站)进站博士后招聘1人笔试参考试题及答案详解
- (完整版)聚氨酯板屋面保温施工方案
- XX中学2026年春季学期期末教职工大会暨暑假工作部署会校长总结讲话
- 2025江苏省药品监督管理局审评中心招聘工作人员3人(公共基础知识)综合能力测试题带答案解析
- GB/T 3488.2-2025硬质合金显微组织的金相测定第2部分:WC晶粒尺寸的测量
- 2024-2025学年山东省济南市高新区统编版四年级下册期末考试语文试卷(解析版)
- 促进睡眠的好方法
- 标准物流公司安全生产管理制度文本
- 环卫企业安全管理制度
- 2025年北京第四实验学校招聘45人笔试备考题库及答案详解1套
- 静设备安装培训课件
- 《中国金融学》课件 第14章 金融发展与金融“五篇大文章”-课件
评论
0/150
提交评论