Как получить правильные метрики файловой системы в C для файловой системы UBIFS с включенным сжатием данных на лету? - PullRequest
0 голосов
/ 22 февраля 2019

Контекст

Я использую файловую систему 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вернул бы правильные метрики файловой системы?

...