/ / Fsync на родителската директория гарантира синхронизиране на мета данни на всички рекурсивни поддиректории? синхронизация,

Дали fsync на родителска директория гарантира синхронизиране на мета данни на всички рекурсивни поддиректории? синхронизация,

В момента пиша приложение за Android, което трябва да работи с много файлове на родна страна.

Наскоро се натъкнах на няколко проблема със загубата на данни или несъответствията при актуализирането или преименуването на тези файлове. (Всички тези файлове се съхраняват в няколко поддиректории от обща родителска / основна директория.)

След като прочетох няколко статии за fsync (), реших да го използвам. Имах обаче едно неясно нещо:

Обажда се fsync () на родителска директория, която рекурсивно гарантира синхронизирането на мета данни на всички поддиректории?

Това означава, че позволявам да направя много преименуване на няколко файла в различни поддиректории в обща родителска директория.

След това трябва да се обадя fsync () на всяка поддиректорияотделно или извикване на fsync () в моята родителска директория е достатъчно, за да се уверите, че метаданните на всички поддиректории (и техните директории с десктоп рекурсивно) са синхронизирани с физическото устройство?

По същество идеята е да спестите време, като избягватемножество fsync () повиквания. Или ще отнеме повече време за fsync () в директория от най-високо ниво в сравнение с fsync () за всяка отделна поддиректория? (Ако приемем, че fysnc () в директорията от най-високо ниво синхронизира всички метаданни на поддиректория)

Отговори:

2 за отговор № 1

Когато fsync се извиква в директорията на операциятатретира целта си повече като файл, отколкото контейнер с файлове. От перспективата на файловата система директорията е специален вид файл, който просто съдържа метаданни за други файлове. Когато fsync се прилага към директория, тази метаданна за съдържащите се файлове се синхронизира, но не и самите поддиректории / файлове.

Ако искате да се уверите, че цялото съдържание е правилно синхронизирано, трябва да ги изрисувате изрично.