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