¿Readdir () garantiza una orden?

Obtengo una lista de archivos en un sistema similar a Linux usando opendir / readdir. Parece que las entradas de directorio se devuelven en orden alfabético de nombre de archivo. Sin embargo, no veo nada en las páginas man acerca de este orden garantizado.

¿Alguien puede decirme si readdir garantiza o no una orden?

El método readdir no garantiza ningún pedido. Si quiere asegurarse de que estén ordenados alfabéticamente, tendrá que hacerlo usted mismo.

Nota: busqué un poco de documentación definitiva diciendo que este es el caso. Lo más cercano que vine es el siguiente enlace

No es para nada definitivo, pero ofrece una buena visión general del comando, su historial y cómo su implementación es, por lo general, un orden transversal.

En resumen, no, readdir () no garantiza ningún orden en particular.

de un ejemplo de readdir en el manual de glibc

El orden en que aparecen los archivos en un directorio suele ser bastante aleatorio. Un progtwig más útil ordenaría las entradas (tal vez alfabetizándolas) antes de imprimirlas

Desde “La interfaz de progtwigción de Linux”:

Los nombres de archivos devueltos por readdir () no están ordenados, sino en el orden en que ocurren en el directorio (esto depende del orden en que el sistema de archivos agrega archivos al directorio y cómo llena los vacíos en el lista de directorios después de eliminar los archivos). (El comando ls -f muestra los archivos en el mismo orden no ordenado que readdir ()).

Podemos usar la función scandir (3) para recuperar una lista ordenada de archivos que coincidan con los criterios definidos por el progtwigdor; ver la página del manual para más detalles. Aunque no se especifica en SUSv3, scandir () se proporciona en la mayoría de las implementaciones de UNIX.

Está explícitamente no garantizado. El orden a menudo sigue algunas reglas, pero las reglas son lo suficientemente complicadas como para no confiar en ellas. El orden puede, por ejemplo, verse afectado por otras operaciones que suceden en el mismo directorio, y usted no puede controlarlas. Trate el orden como al azar, y ordene las cosas usted mismo si lo necesita.

No, readdir no garantiza ningún pedido.

(Algunos sistemas de archivos pueden almacenar entradas de directorio en un orden determinado, en tales casos readdir puede devolvérselos en el mismo orden, pero esa no es una característica de readdir en sí).

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 hice en algunas plataformas – Solaris – sun4sol, x86 sol, linux, Windows con el código de muestra, todos los resultados fueron desplazados de forma aleatoria.


fuente: readdir () que comienza con puntos en lugar de archivos

 #include  #include  #include  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; } 

Además de las otras respuestas, la página de manual de readdir es bastante clara sobre el orden de archivos.

El orden en que se leen los nombres de archivo mediante llamadas sucesivas a readdir () depende de la implementación del sistema de archivos; es poco probable que los nombres se clasifiquen de alguna manera.

Algunos sistemas de archivos, como ReiserFS, enumeran los archivos en orden léxico.

En su caso, debe almacenar los nombres en una matriz, luego ordenar la matriz.

Por ejemplo, use qsort () para ordenar la matriz.