ext2 文件系统相关介绍:ext2文件系统,一个文件除了数据需要存储之外,一些描述信息也需要存储,例如文件类型(常规、目录、符号链接等),权限,文件大小,创建/修改/访问时间等,也就是ls -l命令看到的那些信息,这些信息存在inode中而不是数据块中。但是文件名存在哪里,首先文件名不是存在inode中的,那么文件名存在哪里?
这里我们可以看到目录大小都为4096,当你创建一个目录的时候操作系统会为其分配一个块(4096),文件名也就是存在目录文件中,值得说明的是:当文件的目录下文件很多的时候,目录文件大小就会增大。如下所示如bin目录文件大小就比69632要大了。
下面就以home目录为例:
/home 目录文件中存放一条条记录项,这里记录项包含目录下的文件名和对应的inode号,记录长度等信息。
open()一个/home 目录下为文件hello.c 文件的寻址过程,先找到/home 文件数据块,去匹配记录项的文件名,如果匹配到就可以获取其inode号,然后再根据inode去获取数据指针。可能有人会问/home 怎么找到的呀?home目录的上一级目录为根目录/,操作系统规定根目录/必须放在inode为2的编号上。
可以看到/目录的inode为2.
当open("/home/hsc/ss.c")
因此寻址过程为:操作系统首先找到inode2的数据块,然后根据记录项匹配获得home目录inode号,根据inode号获取相应的数据块,然后再根据记录项找到hsc文件inode号
依次最终找到ss.c 的inode然后找到文件。
原文地址:http://blog.csdn.net/huangshanchun/article/details/44983549