1

我不知道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条目到底如何排序的?是什么导致某些条目比其他条目具有更高的优先级?

4

2 回答 2

3

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

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

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

有关其他评论,请参阅

于 2015-05-28T20:38:50.417 回答
2

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

Advanced Programming in the UNIX Environment,第 3 版,更进一步,甚至说顺序通常不是字母顺序(第 4 章,第 4.22 节):

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

如果您想知道, 的输出ls是排序的,因为ls它是排序的。

于 2015-05-28T20:33:58.463 回答