linux源代码阅读笔记 find_entry分析
78 static struct buffer_head * find_entry(struct m_inode * dir, 79 const char * name, int namelen, struct dir_entry ** res_dir)
find_entry是linux文件系统中一个较为费解的函数。下面我们来分析一番。
它的第一个参数是 m_inode型,它指示了函数操作的所在根目录的inode节点。即相对路径的起始节点。
name自然是想要查找的目录路径,namelen是该目录名的长度。
res_dir是以指针的形式返回想要查找的目录项。
而函数返回值是包含该目录项的block所对应的buffer_head。
为什么会有两个返回值呢。我们知道,ext2文件系统下,目录是以文件形式存在的,inode是目录的索引。
而inode指向的block中存储的是该目录下包含的文件和子目录的信息。它以如下的结构体存在。
140 struct dir_entry { 141 unsigned short inode; 142 char name[NAME_LEN]; 143 };
name数组存储了文件名,inode存储了inode号。这样目录文件实际上也是一个文件,只不过该文件的内容是一个个
dir_entry结构体,因此,它也与普通文件一样,可能占有一个block,也可能占有多个block。
find_entry函数的功能就是找到存储了name参数对应文件的dir_entry所在的block,并且以buffer_head的形式返回,同时
以指针的形式返回该文件对应的dir_entry。