Linux文件名到索引节点的查找案例分析.docVIP

Linux文件名到索引节点的查找案例分析.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux文件名到索引节点的查找案例分析,linux查找文件名,linux查找文件名包含,linux按文件名查找,linux查找文件名命令,linux查找指定文件名,linux模糊查找文件名,linux查找部分文件名,linux查找文件名称,linux根据文件名查找

文件名到索引节点的查找 一,总体过程: __user_walk()首先调用path_init()查找文件绝对路径名或相对路 径名的搜索起点的根目录或当前目录,接着调用path_walk()在目 录项内得到对应的索引节点。 二,代码分析,详细原理: /*参数: name: 指向在用户空间中的路径名 flags: 用来指示怎样寻找目标的标志位 nd: nameidata结构用于在路径查找过程中记录中间信息和查找结果 struct nameidata{ struct dentry *dentry; struct vfsmount *mnt; struct qstr last; unsigned int flags; int last_type; }; */ int __user_walk(const char *name, unsigned flags, struct nameidata *nd) { char *tmp; int err; tmp = getname(name);/* 通过getname()在系统空间中分配一个页面, 从用户空间把文件名name复制到这个页面中, 并把分配的页面的路径名赋给tmp */ err = PTR_ERR(tmp); /* 强制转换tmp为long,用来判断函数的返回值 是否是一个有效的指针,指针有三种情况,一种是有 效指针,一种是NULL,空指针,一种是错误指针,或 者说无效指针,就是指其已经到达了最后一个page. 内核空间最高地址0xffffffff,那么最后一个page 就是指的 0xfffff000~0xffffffff(4k一个page) */ if (!IS_ERR(tmp)) { /* getname()返回有可能是一个分配的页面的首地址: 通过PTR_ERR()将这个指针类型的地址转化为一个 整型,再通过IS_ERR()判断是否是一个有效的页面首 地址;若getname()返回时错误码情况,ENOMEM定义 值是12,经过ERR_PTR(-ENOMEM)返回成了指针类 型,指向0xFFFFFFF4,指向虚拟内核空间的top4KB空 间,通过IS_ERR()判断返回的是false */ err = 0; if (path_init(tmp, flags, nd))/* 若返回1,则完成对路径的搜索工作, 即对nameidata结构的初始化完成,此时 nameidata结构中的指针dentry指向路径 搜索的起点 */ err = path_walk(tmp, nd); /* 通过path_walk()顺着路径名的指引进 行搜索,找到索引节点*/ putname(tmp); /* 通过putname()释放之前动态分配的空间 */ } return err; } int path_init(const char *name, unsigned int flags, struct nameidata *nd) { nd-last_type = LAST_ROOT; /* 将nameeidata结构中的last_type字段 设置成LAST_ROOT,在搜索的过程中, 这个字段的值会随着路径名的当前搜索结 果而变。例如当成功地找到目标文件, 会变成LAST_NORM;当最后停留在一个“.” 上,则变成LAS

文档评论(0)

docindpp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档