Как получить правильные метрики файловой системы в C для файловой системы UBIFS с включенным сжатием данных на лету?
контекст
Я использую файловую систему 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
вызов вернул бы правильные метрики файловой системы?