现在的位置: 首页 > 综合 > 正文

uclinux内核VFS的简单遍历

2013年09月01日 ⁄ 综合 ⁄ 共 868字 ⁄ 字号 评论关闭

在内核解开rootfs.initramfs之后,VFS就在内核建立了一棵树,我们写一段简单的代码对这个树进行遍历:

static void VFSWalk(CVFSWalk* pWalk, void* pParent, dentry* pEntry)

{

     // 插入所有的子节点

     struct dentry* pNode;

     void* pLast = NULL;

     list_for_each_entry(struct dentry, pNode, &pEntry->d_subdirs, d_u.d_child)

     {

         pLast = pWalk->Insert((char*)pNode->d_name.name, pParent, pLast);

         VFSWalk(pWalk, pLast, pNode);

     }

}

 

void VFSWalk(CVFSWalk* pWalk)

{

     // 插入所有的节点

     struct dentry* pEntry = current->nsproxy->mnt_ns->root->mnt_root;

     void* pRoot = pWalk->Insert("/", NULL, NULL);

     VFSWalk(pWalk, pRoot, pEntry);

}

在这里CVFSWalk封装了CTreeCtrlInsertItem函数,这样每在VFS中找到一个节点就在树控件上相应地创建一项。

遍历从根文件系统的dentry开始,只使用struct dentry结构体的d_subdirs成员。

从实验结果验证了:

1、每一个普通文件或者目录都用一个dentry结构体来表示。

2、对于链接到目录的符号文件,dentry的子节点为空。

嗯,继续内核的学习之路~~~

 

 

近日,我家6岁的小姑娘参加了第六届POP全国少儿英语风采大赛,拉票进行中(2011-6-15前)。

请帮忙点击新东方网站的链接:

http://popdasai.xdf.cn/toupiao.php?do=space&uid=4237

投她一票,谢谢!

抱歉!评论已关闭.