语境
我正在使用启用了动态数据压缩的 UBIFS 文件系统。我需要在 C 代码中获取正确的文件系统指标(总、已用、可用空间)。
尝试了什么
我使用statvfs
call 成功检索了指标,但注意到返回的值好像数据从未压缩过。在sync(8)
从命令行调用并再次调用 C 代码后,返回了正确的值,因此在 C 代码中我包含了对sync(2)
right before的调用statvfs
。再次调用修改后的 C 代码仍会返回带有值的指标,就好像数据未压缩一样。然后我之前尝试进行系统调用system("sync")
,statvfs
但仍然返回了不正确的度量值。只有在等待 10 秒或通过显式sync(8)
调用后,返回的文件系统指标才是正确的。
问题
sync(2)
1)为什么之前调用或system("sync")
在C代码中调用statvfs
和sync(8)
从命令行调用之间存在这种差异?
2) 如何在 C 代码中将挂起/缓存的数据提交到磁盘,以便后续statvfs
调用返回正确的文件系统指标?