В настоящее время я пишу приложение для Android, которое должно работать с большим количеством файлов со своей стороны.Предоставляет ли fsync родительский каталог синхронизацию метаданных всех рекурсивных подкаталогов?
Недавно я столкнулся с несколькими проблемами потери данных или непоследовательности при обновлении или переименовании этих файлов. (Все эти файлы хранятся в нескольких подкаталогах из общего родительского/корневого каталога.)
После прочтения нескольких статей о fsync() я решил использовать его. Однако у меня было одно непонятное:
Вызывает ли вызов fsync() в родительском каталоге синхронизировать метаданные всех подкаталогов, рекурсивно?
То есть, допустим, я выполняю много операций переименования нескольких файлов в разных подкаталогах в общем родительском каталоге.
Затем следует вызвать fsync() в каждом подкаталоге отдельно или вызвать fsync() в родительском каталоге, чтобы убедиться, что метаданные всех подкаталогов (и их дочерние каталоги рекурсивно) синхронизированы с физическое устройство?
В принципе идея состоит в том, чтобы сэкономить время, избегая нескольких вызовов fsync(). Или потребуется больше времени для fsync() в каталоге верхнего уровня по сравнению с fsync() в каждом отдельном подкаталоге? (Предполагая, что fysnc() в каталоге верхнего уровня синхронизирует все метаданные подкаталогов)