Мне нужно пройти дерево каталогов и получить значения stat для каждого файла. Я хочу сделать это безопасно, пока файловая система будет изменена.Прогулка по каталогу без гонок (C++)
В Python лучшим вариантом является os.fwalk
, который дает доступ к fd для проходящего каталога; Затем я смогу os.stat
с dir_fd (fstatat
) и получить текущие значения stat. Это как без гонок, так как это может быть сделано в Linux (если содержимое этого каталога изменяется, возможно, мне придется его повторно просмотреть). В C есть nftw
, который реализован аналогично, и fts
, который в glibc использует простой (l) stat и поэтому является racy (он уменьшает окно гонки, меняя каталоги, что неудобно).
C++ имеет новый filesystem APIgraduated from boost, который кэширует stat
значения, но doesn't expose them (и мне нужен доступ к st_dev). Это не просто библиотека заголовков, поэтому я не могу обойти это.
Не хватает ли у меня подходящей опции C++, которая использует fstatat
и не связана идеей Boost о том, что вы не разоблачаете вызовы на платформе? Или мой лучший вариант обернуть nftw
(или даже find
)?