readdir()是否保证订单?

Tom*_*Tom 50 c readdir

我正在使用opendir/readdir获取类似linux的系统上的文件列表.看来目录条目按文件名的字母顺序返回.但是,我在手册页中看不到有关此订单的任何内容.

谁能告诉我readdir是否保证订单?

Jar*_*Par 41

readdir方法不保证任何订购.如果你想确保按字母顺序排序,你需要自己做.

注意:我搜索了一些明确的文档说这是事实.我最接近的是以下链接

它绝不是决定性的,但它确实给出了命令的一个很好的概述,它的历史以及它的实现通常是遍历顺序.


Joa*_*son 13

简而言之,不,readdir()不保证任何特定的顺序.

来自glibc手册中的readdir示例

文件在目录中出现的顺序往往是相当随机的.一个更有用的程序会在打印条目之前对条目进行排序(可能通过按字母顺序排列)


小智 10

来自"Linux编程接口":

readdir()返回的文件名不按排序顺序排列,而是按照它们在目录中发生的顺序排列(这取决于文件系统将文件添加到目录的顺序以及它如何填充目录中的空白删除文件后的目录列表).(命令ls -f以readdir()检索它们的相同未排序顺序列出文件.)

我们可以使用函数scandir(3)来检索符合程序员定义标准的文件的排序列表; 有关详细信息,请参见手册页.尽管未在SUSv3中指定,但在大多数UNIX实现中都提供了scandir().


小智 8

它明确无法保证.排序通常遵循一些规则,但规则很复杂,你不应该依赖它们.例如,排序可能会受到同一目录中发生的其他操作的影响,您无法控制这些操作.将排序视为随机排序,并在需要时自行排序.


nos*_*nos 6

不,readdir不保证任何订单.

(某些文件系统可能按特定顺序存储目录条目,在这种情况下,readdir可能会以相同的顺序将它们返回给您,但这不是readdir本身的功能.)