C dirent条目是如何排序的?

C dirent条目是如何排序的?,c,directory,dirent.h,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 如您所见,此输出不是按字母顺序排列的。所以,我想知道di

我不知道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条目的顺序是怎样的?是什么导致某些条目的优先级高于其他条目?

它们没有以任何相关方式排序。由实现以最方便的顺序检索和返回目录项

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

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


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

它们没有以任何相关的方式排序。由实现以最方便的顺序检索和返回目录项

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

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


如果您想知道,ls的输出是按字母顺序排序的,因为ls对其进行排序。

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

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

按文件名排序的列表取决于事物的排序方式:它可以依赖于区域设置。文件系统不知道或不关心您的区域设置。因此,决定权留给应用程序,而不是文件系统本身

有关其他注释,请参阅


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

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

按文件名排序的列表取决于事物的排序方式:它可以依赖于区域设置。文件系统不知道或不关心您的区域设置。因此,决定权留给应用程序,而不是文件系统本身

有关其他注释,请参阅


排序是否通常按字母顺序取决于文件系统。有些文件系统按排序顺序存储文件名,导致文件总是按排序返回。排序是否通常按字母顺序取决于文件系统。某些文件系统按排序顺序存储文件名,从而使文件总是按排序返回。