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。其他方案(例如列表中较早的常用文件名)也是可能的。
按文件名排序的列表取决于事物的排序方式:它可以与语言环境相关。 (文件系统不知道也不关心您的语言环境设置)。所以这个决定留给应用程序而不是文件系统本身。
有关其他评论,请参阅
- What determines the order directory entries are returned by getdents?
- What is the “directory order” of files in a directory (used by
ls -U
)?
- In Bash, are wildcard expansions guaranteed to be in order?
我不知道 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。其他方案(例如列表中较早的常用文件名)也是可能的。
按文件名排序的列表取决于事物的排序方式:它可以与语言环境相关。 (文件系统不知道也不关心您的语言环境设置)。所以这个决定留给应用程序而不是文件系统本身。
有关其他评论,请参阅
- What determines the order directory entries are returned by getdents?
- What is the “directory order” of files in a directory (used by
ls -U
)? - In Bash, are wildcard expansions guaranteed to be in order?