50 votes

Ne readdir (), la garantie d'une commande?

J'obtiens une liste de fichiers sur un linux comme système à l'aide de fonctions opendir/readdir. Il semble que les entrées du répertoire sont retournés dans l'ordre alphabétique de nom de fichier. Cependant, je ne vois rien dans les pages de manuel à propos de cet ordre ne soit garanti.

Quelqu'un peut me dire si oui ou non readdir guarrantees une commande?

43voto

JaredPar Points 333733

L' readdir méthode ne garantit pas le tout de la commande. Si vous voulez vous assurer qu'ils sont triés par ordre alphabétique, vous aurez besoin de le faire vous-même.

Note: j'ai cherché un peu pour la documentation définitive disant que c'est le cas. Le plus proche que je suis venu est le lien suivant

Ce n'est pas définitive, mais elle donne un bon aperçu de la commande, c'est de l'histoire et comment elle est mise en œuvre est généralement la traversée de l'ordre.

13voto

Joachim Isaksson Points 85969

En bref, non, readdir() ne garantit pas un ordre particulier.

à partir d'un readdir exemple dans le manuel de la glibc

L'ordre dans lequel les fichiers apparaissent dans un répertoire tend à être assez aléatoire. Un logiciel utile serait de trier les entrées (peut-être par le classement en ordre alphabétique) avant de les imprimer

10voto

efannu-723 Points 41

De "L'linux programming interface":

Les noms de fichiers retournés par readdir() ne sont pas dans l'ordre de tri, mais plutôt dans le l'ordre dans lequel ils se trouvent à se produire dans le répertoire (cela dépend de l'ordre dans du fichier, le système ajoute des fichiers du répertoire et de la façon dont il remplit les lacunes dans le répertoire liste une fois que les fichiers sont supprimés). (La commande ls –f listes des fichiers dans la même non triés pour qu'ils puissent être récupérés par readdir().)

Nous pouvons utiliser la fonction scandir(3) pour récupérer une liste triée de fichiers correspondant programmeur des critères définis; voir la page de manuel pour plus de détails. Bien que n'étant pas spécifié dans SUSv3, scandir() est fournie sur la plupart des implémentations UNIX.

8voto

Lars Wirzenius Points 12197

Il est explicitement pas garanti. La commande souvent suit quelques règles, mais les règles sont assez compliquées que vous ne devriez pas compter sur eux. L'ordre peut, par exemple, être affectée par d'autres opérations qui se passe dans le même répertoire, et vous ne pouvez pas les contrôler. Traiter la commande comme aléatoire, et les choses vous-même si vous en avez besoin.

6voto

nos Points 102226

Non, readdir ne garantit pas n'importe quel ordre.

(Certains systèmes de fichiers peuvent stocker des entrées de répertoire dans un certain ordre, dans de tels cas, readdir pourrait revenir à vous dans le même ordre, mais ce n'est pas une caractéristique de readdir lui-même.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X