目录文件是目录条目结构的链表。每个结构都包含条目的名称、与该条目的数据关联的 inode 以及目录文件中到下一个条目的距离。
但它并没有说 inode 中有终止符。此外,没有任何字段可以告诉目录 inode 中有多少条目。
那么问题来了:当你读取 inode 数据结构时,你怎么知道它什么时候到达了链表的末尾呢?
示例:假设一个空的根目录“/”。所以命令ls
应该打印出如下内容:
drwxr-xr-x 4 junji junji 4096 Mar 23 10:33 .
drwxr-xr-x 7 junji junji 4096 Mar 23 10:27 ..
drwxr-xr-x 7 junji junji 4096 Mar 23 10:27 lost+found
在实现的时候ls
,你已经从磁盘中读取了根 inode 结构,然后按照i_blocks
并尝试获取所有目录条目。在磁盘上,条目列表实际上存储如下:
{inode = 2, rec_len = 12, name_len = 1, name = .}
{inode = 2, rec_len = 12, name_len = 2, name = ..}
{inode = 12, rec_len = 1000, name_len = 6, name = lost+found}
{inode = 12, rec_len = 12, name_len = 1, name = .}
{inode = 2, rec_len = 32, name_len = 2, name = ..}
...
第三个“lost+found”条目旁边还有另一个条目。
显然程序应该在“lost+found”条目处停止,因为下一个条目,即“.”。属于另一个目录。但是我们如何让我们的程序知道这一点呢?我们什么时候知道它是目录条目列表的结尾?
谢谢!
编辑:
inode 列表有点不一致。特别rec_len
是 lost+found 条目是 1000 而不是 980。我更正了。