2009-10-30 17 views
3

J'écris un démon qui utilise inotify pour surveiller l'accès aux fichiers et il est essentiel de ne rien manquer d'une recherche récursive. J'ai trouvé this interesting idea et j'ai commencé à l'implémenter. Ftw() et ftw64() n'utilisent pas un algorithme de largeur d'abord, c'est plutôt une "précommande". nftw() me donne l'option de la profondeur en premier, mais je m'inquiète pour les races des feuilles supérieures. J'espere qu'il me manque quelque chose, peut-etre une extension GNU? Ou est-ce que je cherche juste à implémenter le mien avec des rappels sécurisés de type (quelque chose que je préférerais vraiment ne pas faire)?Est-ce que les fonctions POSIX ou les extensions de la glibc implémentent une marche en arborescence de fichiers en largeur?

Ou, est-ce que ma compréhension des avantages de la largeur d'abord sur la profondeur est erronée pour ce type d'application?

+1

Vous n'avez probablement plus besoin de cela, mais j'ai implémenté une variante de nftw (3): https://github.com/tavianator/bfs/blob/master/bftw.c –

+0

@TavianBarnes assez bon et très autonome, peut-être envisager de l'envoyer à [CCAN] (http://ccodearchive.net/)? Dans ce cas particulier, je viens de contourner le comportement en profondeur en tant que limitation, je vais revoir ce code maintenant :) –

+0

Huh, TIL à propos du CCAN. Je vais penser à le télécharger après avoir fait quelques changements et écrire quelques tests :) –

Répondre

1

En regardant la spécification de 'nftw()', l'indicateur FTW_DEPTH effectue un parcours post-ordre (profondeur en premier), visitant les sous-répertoires avant de visiter le noeud de répertoire.

Je ne pense pas que l'un des algorithmes standard fasse une recherche en largeur.

Probablement, vous devriez écrire un bfftw() basé sur l'interface nftw(). Notez que vous devez mettre en file d'attente les éléments à visiter récursivement (répertoires) pendant l'analyse.