Parcourir efficacement L'arborescence des répertoires avec opendir (), readdir () et closedir()

les routines C opendir (), readdir() et closedir () me fournissent un moyen de parcourir une structure de répertoire. Cependant, chaque structure de dirent renvoyée par readdir() ne semble pas être un moyen utile pour moi d'obtenir l'ensemble des pointeurs à DIR que j'aurais besoin de retrouver dans les sous-répertoires du répertoire.

bien sûr, ils me donnent le nom des fichiers, donc je peux soit ajouter ce nom au répertoire path et stat() et opendir() them, ou je peux changer le nom courant répertoire de travail du processus via le chdir() et de le restaurer via chdir("..").

le problème avec la première approche est que si la longueur du chemin de répertoire est assez grande, alors le coût pour passer une chaîne contenant à opendir() surchargera le coût d'ouvrir un répertoire. Si vous êtes un peu plus théorique, vous pourriez dire que votre complexité pourrait augmenter au-delà du temps linéaire (dans le nombre total de caractères des noms de fichiers (relatifs) dans le répertoire arbre.)

de plus, la seconde approche a un problème. Comme chaque processus a un répertoire courant unique, Tous les threads, sauf un, devront être bloqués dans une application multithread. De plus, Je ne sais pas si le répertoire courant n'est qu'une simple commodité (c'est-à-dire que le chemin relatif y sera ajouté avant une requête du système de fichiers). Si elle l'est, cette approche sera inefficace.

j'accepte des alternatives à ces fonctions. Donc, comment on peut parcourir un L'arborescence des répertoires UNIX efficacement (temps linéaire dans le nombre total de caractères des fichiers sous elle)?

15
demandé sur Luís Fernando S. X. Silveira 2010-02-22 18:57:39

4 réponses

Avez-vous essayé ftw() alias Marche De L'Arborescence Des Fichiers