2017-05-25 152 views
1

我们正在开发iMX6Sx飞思卡尔开发板,用Yocto构建Linux内核发行版。 我想知道是否有办法检查是否有可能检查文件系统操作(特别是写入)是否是真的已终止,从而避免在操作仍在运行时关闭/终止进程。要更加清楚:当我们的应用程序必须关闭时,我们必须做一些操作(文件副本,写入,...),并且我们必须知道(因为它们是我认为的异步),当它们真的完成了。文件系统操作确实“刷新”

在此先感谢 安德烈

回答

2

如果你想确保所有的写操作都致力于为存储和文件系统更新:

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

当这两个都完成后,ke rnel已经刷新了内存中的所有内容,并确保文件系统针对您操作的文件进行了更新。

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

注:

  • 如果您的应用程序与文件工作*而不是文件描述符,你需要首先保证写入的数据是从应用程序到内核刷新,通过调用fflush()或FCLOSE FILE *

  • 如果你杀了一个应用程序,它所执行的任何写操作都不会被取消或中断,你可以通过调用sync()或者打开同一个文件并调用fsync() ) 在上面。

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

+0

非常感谢您对我的问题的完整答案。 sync()是我们需要的,因为我们的应用程序并不直接控制所有的复制/写入操作(它不知道涉及的所有文件描述符)。 – Andre