Контекст
Я использую файловую систему UBIFS с включенным сжатием данных на лету.Мне нужно получить правильные метрики файловой системы (общее, использованное, свободное пространство) в коде C.
Что было опробовано
Я использовал statvfs
вызов для полученияметрики успешно, но заметил, что возвращаемые значения были, как будто данные никогда не были сжаты.После выполнения вызова sync(8)
из командной строки и повторного вызова кода C были возвращены правильные значения, поэтому в коде C я включил вызов sync(2)
прямо перед statvfs
.Повторный вызов модифицированного кода C по-прежнему возвращает метрики со значениями, как если бы данные не были сжаты.Затем я попытался сделать системный вызов system("sync")
до statvfs
, но все равно были возвращены неверные значения метрики.Только после 10 секунд ожидания или явного sync(8)
вызова возвращаемые метрики файловой системы были правильными.
Вопросы
1) Почему существует разница между вызовом sync(2)
или system("sync")
в коде C прямо перед statvfs
и sync(8)
вызовом из командной строки?
2) Как зафиксировать ожидающие / кэшированные данные на диск в коде C, чтобы последующий вызов statvfs
вернул бы правильные метрики файловой системы?