文件系统操作真的“刷新”

时间:2017-05-25 14:08:48

标签: linux io filesystems yocto

我们正在开发iMX6Sx飞思卡尔主板,使用Yocto构建Linux内核发行版。 我想知道是否有办法检查是否可以检查文件系统操作(特别是写入)是否真正终止,避免在操作仍然停止时关闭/终止进程运行

更清楚一点:当我们的应用程序必须关闭时,我们必须做一些操作(文件副本,写入...),我们必须知道(因为它们是异步的,我认为)当它们是真的完成了。

提前致谢 安德烈

1 个答案:

答案 0 :(得分:2)

如果要确保所有写入都提交到存储并且文件系统已更新:

  • 在文件描述符
  • 上调用fsync()
  • 打开父目录并在该文件描述符
  • 上调用fsync()

当这两个都完成后,内核已经从内存刷新了所有内容,并确保文件系统更新了你操作的文件。

另一种方法是调用sync(),这可以确保所有文件和文件系统元数据都写入存储的所有内核数据。

注意:

  • 如果您的应用程序使用FILE *而不是文件描述符,则需要首先确保通过调用fflush()或fclose FILE *

    将写入的数据从应用程序刷新到内核
  • 如果您终止某个应用程序,它所执行的任何写入操作都不会被取消或中断,您可以通过调用sync()或打开同一个文件并调用它来确保它已提交到存储fsync()就可以了。

  • 如果你任意杀死一个应用程序,你就不能期望一切都是一致的,也许应用程序正在对数据库,配置文件等进行2次重要写入,并且在1次写入后你终止了它,文件可能会因其格式而受损。