readdir()保证一个命令吗?

我正在使用opendir / readdir获取类似linux的系统上的文件列表。 目录条目似乎是以文件名的字母顺序返回的。 但是,我没有看到任何关于这个订单保证的手册页。

谁能告诉我是否读取保证书?

readdir方法不保证任何顺序。 如果你想确保他们按字母顺序sorting,你需要自己做。

注意:我search了一下确切的文档,说是这样的。 我来的最接近的是以下链接

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

总之,不,readdir()不保证任何特定的顺序。

从glibc手册中的readdir示例

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

从“linux编程接口”:

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

我们可以使用函数scandir(3)来检索与程序员定义的标准匹配的文件的sorting列表; 有关详细信息,请参阅手册页。 虽然没有在SUSv3中指定,但大多数UNIX实现都提供了scandir()。

这显然不能保证。 sorting通常遵循一些规则,但规则很复杂,你不应该依赖它们。 例如,sorting可能受同一目录中发生的其他操作的影响,您无法控制这些操作。 如果你需要的话,把订单当成随机的,自己分类。

不,readdir不保证任何顺序。

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

readdir()不保证任何其他高于OS磁盘读取顺序的顺序。


根据我在几个平台上进行的testing – Solaris – sun4sol,x86 sol,linux,Windows以及示例代码,所有结果都以随机方式排列。


源代码: readdir()以点而不是文件开头

 #include <stdio.h> #include <stdlib.h> #include <dirent.h> int main() { DIR *dir; struct dirent *dp; char * file_name; char dirpath [100] ; while(1==1){ printf("Choose dir:"); scanf("%s",dirpath); dir = opendir(dirpath); while ((dp=readdir(dir)) != NULL) { if ( !strcmp(dp->d_name, ".") || !strcmp(dp->d_name, "..") ) { // do nothing (straight logic) } else { file_name = dp->d_name; // use it printf("file_name: \"%s\"\n",file_name); } } closedir(dir); } return 0; }