readdir() no garantiza ningún otro orden por encima de la orden de lectura del disco del sistema operativo.
De acuerdo con la prueba que he hecho en algunas plataformas Solaris - - sun4sol, sol x86, Linux, Windows con el código de ejemplo todos los resultados fueron displated de manera aleatoria.
fuente: readdir() beginning with dots instead of files
#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;
}
Como regla general, las probabilidades son que si no está en la documentación, la respuesta es no. Incluso si hubiera un orden consistente en todas las implementaciones, si no está documentado, probablemente no esté garantizado. –
Si salen en orden alfabético, es casi seguro que fueron originalmente * creados * en orden alfabético, p. por 'unzip' o' tar' extrayéndolos como tales ... 'readdir' no proporciona ningún orden. –
Por cierto, 'scandir' puede ser útil si desea ordenar los resultados o tener acceso aleatorio a ellos. Está estandarizado en POSIX 2008 y era una extensión común antes de esa fecha. –