Какие-нибудь функции POSIX или расширения glibc реализуют обход дерева файлов в ширину? - PullRequest
3 голосов
/ 30 октября 2009

Я пишу демон, который использует inotify для мониторинга доступа к файлам, и очень важно, чтобы я ничего не пропустил при рекурсивном поиске. Я нашел эту интересную идею и начал ее реализовывать.

ftw () и ftw64 () не используют алгоритм в ширину, это более «предварительный порядок». nftw () дает мне возможность сначала выбрать глубину, но я беспокоюсь о гонках на верхних листьях.

Я надеюсь, что что-то упустил, возможно расширение GNU? Или я просто смотрю на реализацию своей собственной системы с безопасными обратными вызовами (что я действительно предпочел бы не делать)?

Или, мое понимание преимуществ широты по сравнению с глубиной в первую очередь ошибочно для этого типа приложения?

1 Ответ

1 голос
/ 30 октября 2009

Глядя на спецификацию для ' nftw () ', флаг FTW_DEPTH выполняет обход по порядку (сначала в глубину), посещая подкаталоги перед посещением узла каталога.

Я не думаю, что какой-либо из стандартных алгоритмов выполняет поиск в ширину.

Предположительно, вы должны написать bfftw () на основе интерфейса nftw (). Обратите внимание, что вы должны ставить в очередь элементы, которые необходимо посетить рекурсивно (каталоги) во время сканирования.

...