设为首页 加入收藏

TOP

Linux中文件名解析处理源码分析(二)
2014-11-24 08:32:19 来源: 作者: 【 】 浏览:1
Tags:Linux 文件 解析 处理 源码 分析
ly(parent->d_flags & DCACHE_OP_HASH)) {
/* 如果该标记有效,需要重新计算hash值 */
err = parent->d_op->d_hash(parent, nd->inode,
&this);
if (err <0)
break;
}
}
/* 如果字符串已经解析完毕,直接跳转到last_component */
/* remove trailing slashes */
if (!c)
goto last_component;
while (*++name == '/');
if (!*name)
goto last_component;
/* 通过walk_component函数找到解析字符串对应的inode,并且将nd->inode改称最新inode,准备继续解析后面的字符串信息。因为目录项所管理的inode在系统中通过hash表进行维护,因此,通过hash值可以很容易的找到inode。如果内存中还不存在inode对象,对于ext3文件系统会通过ext3_lookup函数从磁盘上获取inode的元数据信息,并且构造目录项中所有的inode对象。 */
err = walk_component(nd, &next, &this, type, LOOKUP_FOLLOW);
if (err <0)
return err;


.if (err) {
err = nested_symlink(&next, nd);
if (err)
return err;
}
if (can_lookup(nd->inode))
continue;
/* 字符串还没有解析完毕,但是当前的inode已经继续不允许解析处理了,所以,返回错误码 */
err = -ENOTDIR;
break;
/* here ends the main loop */


.last_component:
/* 最后一个字符串不需要解析处理,需要由do_last函数来处理,此处结束解析,正确返回 */
nd->last = this;
nd->last_type = type;
return 0;
}
terminate_walk(nd);
return err;
}


小结


文件名解析处理是文件系统的必备功能,通过文件名的解析索引到表示文件的inode内存对象,并且创建文件对象file。在文件名解析的过程中,首先需要确定的是检索起始点,然后通过hash table查找目录项以及检索文件。在查找的过程中,需要考虑文件访问的权限以及符号连接等问题。总体来说这些代码难度不是很大,但是需要有一个整体的思路,就可以更好的理解分析代码了,这里只是对名字解析过程中的几个关键函数进行抛砖引玉式的分析。不正之处,敬请指出。



首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Objective-C学习——布尔类型 下一篇将websocket移植到DevKit8000

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·怎样用 Python 写一 (2025-12-27 02:49:19)
·如何学习python数据 (2025-12-27 02:49:16)
·想要自学数据分析, (2025-12-27 02:49:14)
·Java 集合框架 - 菜 (2025-12-27 02:19:36)
·Java集合框架最全详 (2025-12-27 02:19:33)