我们正在开发iMX6Sx飞思卡尔开发板,用Yocto构建Linux内核发行版。 我想知道是否有办法检查是否有可能检查文件系统操作(特别是写入)是否是真的已终止,从而避免在操作仍在运行时关闭/终止进程。要更加清楚:当我们的应用程序必须关闭时,我们必须做一些操作(文件副本,写入,...),并且我们必须知道(因为它们是我认为的异步),当它们真的完成了。文件系统操作确实“刷新”
在此先感谢 安德烈
我们正在开发iMX6Sx飞思卡尔开发板,用Yocto构建Linux内核发行版。 我想知道是否有办法检查是否有可能检查文件系统操作(特别是写入)是否是真的已终止,从而避免在操作仍在运行时关闭/终止进程。要更加清楚:当我们的应用程序必须关闭时,我们必须做一些操作(文件副本,写入,...),并且我们必须知道(因为它们是我认为的异步),当它们真的完成了。文件系统操作确实“刷新”
在此先感谢 安德烈
如果你想确保所有的写操作都致力于为存储和文件系统更新:
当这两个都完成后,ke rnel已经刷新了内存中的所有内容,并确保文件系统针对您操作的文件进行了更新。
另一种方法是调用sync(),它确保将所有内核数据写入所有文件和文件系统元数据的存储中。
注:
如果您的应用程序与文件工作*而不是文件描述符,你需要首先保证写入的数据是从应用程序到内核刷新,通过调用fflush()或FCLOSE FILE *
如果你杀了一个应用程序,它所执行的任何写操作都不会被取消或中断,你可以通过调用sync()或者打开同一个文件并调用fsync() ) 在上面。
如果你任意杀死一个应用程序,你不可能期望每件事都是一致的,也许应用程序正在对数据库,配置文件等进行2次重要写入,并且在1次写入后终止它,该文件可能会根据其格式受损。
非常感谢您对我的问题的完整答案。 sync()是我们需要的,因为我们的应用程序并不直接控制所有的复制/写入操作(它不知道涉及的所有文件描述符)。 – Andre