我对dirent
条目的订购方式感到茫然。例如,如果我有代码
DIR* dir = opendir("/some/directory");
struct dirent* entry;
while ((entry = readdir(dir))
printf("%s\n", entry->d_name);
这可能会输出如下内容:
abcdef
example3
..
.
123456789
example2
example1
如您所见,此输出不按字母顺序排列。所以,我想知道 是什么原因导致某些条目的优先级高于其他条目?
答案 0 :(得分:3)
它们不按字母顺序排列;它们按文件系统维护它们的顺序检索。
目录"文件"只包含文件名和inode编号列表。对于某些文件系统类型,文件系统更喜欢不在块之间拆分文件名/ inode值。当文件系统从列表中添加或删除文件时,它可能会在其中一个块中找到空间。其他方案(例如列表中较早的常用文件名)是可能的。
按文件名排序的列表取决于事物的排序方式:它可以是与语言环境相关的。 (文件系统不知道或不关心您的语言环境设置)。因此,决定权留给应用程序而不是文件系统本身。
有关其他评论,请参阅
答案 1 :(得分:2)
它们不以任何相关方式订购。这取决于以最方便的顺序检索和返回目录条目的实现。
UNIX环境中的高级编程,第3版,更进一步,甚至说订单通常不是按字母顺序排列的(第4章,第4.22节):
请注意目录中条目的顺序是 依赖于实现,通常不是按字母顺序排列的。
如果您想知道,ls
的输出已排序,因为ls
对其进行排序。