dirent条目是如何排序的?

How are dirent entries ordered?

我不知道 dirent 条目是如何排序的。例如,如果我有代码

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

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

这可能会输出如下内容:

abcdef
example3
..
.
123456789
example2
example1

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

它们没有以任何相关方式排序。以最方便的顺序检索和 return 目录条目取决于实现。

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

Note that the ordering of entries within the directory is implementation dependent and is usually not alphabetical.

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

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

目录"file" 仅包含文件名和索引节点编号的列表。对于某些文件系统类型,文件系统不希望将 filename/inode 值拆分为 。当文件系统从列表中添加或删除文件时,它可能会在其中一个块中找到 space。其他方案(例如列表中较早的常用文件名)也是可能的。

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

有关其他评论,请参阅