【问题标题】:How are dirent entries ordered?dirent条目是如何排序的?
【发布时间】:2015-08-11 13:13:12
【问题描述】:

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

【问题讨论】:

    标签: c directory dirent.h


    【解决方案1】:

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

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

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

    有关其他 cmets,请参阅

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 排序是否“通常”按字母顺序取决于文件系统。一些文件系统按排序顺序存储文件名,导致文件总是按排序返回。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 2011-09-09
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多