如何订购直接条目?

时间:2015-05-28 20:31:23

标签: c directory dirent.h

我对dirent条目的订购方式感到茫然。例如,如果我有代码

DIR* dir = opendir("/some/directory");
struct dirent* entry;

while ((entry = readdir(dir))
    printf("%s\n", entry->d_name);

这可能会输出如下内容:

abcdef
example3
..
.
123456789
example2
example1

如您所见,此输出不按字母顺序排列。所以,我想知道 是什么原因导致某些条目的优先级高于其他条目?

2 个答案:

答案 0 :(得分:3)

它们不按字母顺序排列;它们按文件系统维护它们的顺序检索。

目录"文件"只包含文件名和inode编号列表。对于某些文件系统类型,文件系统更喜欢不在之间拆分文件名/ inode值。当文件系统从列表中添加或删除文件时,它可能会在其中一个块中找到空间。其他方案(例如列表中较早的常用文件名)是可能的。

按文件名排序的列表取决于事物的排序方式:它可以是与语言环境相关的。 (文件系统不知道或不关心您的语言环境设置)。因此,决定权留给应用程序而不是文件系统本身。

有关其他评论,请参阅

答案 1 :(得分:2)

它们不以任何相关方式订购。这取决于以最方便的顺序检索和返回目录条目的实现。

UNIX环境中的高级编程,第3版,更进一步,甚至说订单通常不是按字母顺序排列的(第4章,第4.22节):

  

请注意目录中条目的顺序是   依赖于实现,通常不是按字母顺序排列的。

如果您想知道,ls的输出已排序,因为ls对其进行排序。