文件系统操作真的"flushed"
file system operation really "flushed"
我们正在开发 iMX6Sx Freescale 开发板,使用 Yocto 构建 Linux 内核发行版。
我想知道是否有办法检查是否有可能检查文件系统操作(特别是写入)是否真的终止,避免close/kill在操作仍在 运行.
时进行处理
更清楚一点:当我们的应用程序必须关闭时,我们必须执行一些操作(文件副本、写入等),并且我们必须知道(因为我认为它们是异步的)它们何时“真的完成了。
提前致谢
安德里亚
如果要确保所有写入都提交到存储并更新文件系统:
- 在文件描述符上调用 fsync(),
- 打开父目录并对该文件描述符调用 fsync()
当这两项都完成后,内核已从内存中清除所有内容,并确保文件系统已根据您操作的文件进行更新。
另一种方法是调用 sync(),这可确保将所有内核数据写入所有文件和文件系统元数据的存储空间。
注:
如果您的应用程序正在使用 FILE* 而不是文件描述符,您需要首先确保写入的数据从您的应用程序刷新到内核,方法是调用 fflush() 或 fclose FILE*
如果你杀死一个应用程序,它执行的任何写操作都不会被取消或中断,你可以通过调用 sync() 或打开同一个文件并调用来确保它已提交到存储fsync() 就可以了。
如果你任意终止一个应用程序,你不能指望一切都是一致的,也许应用程序正在对数据库、配置文件等进行 2 次重要写入,而你在 1 次之后终止了它写入,根据文件格式,文件可能已损坏。
我们正在开发 iMX6Sx Freescale 开发板,使用 Yocto 构建 Linux 内核发行版。 我想知道是否有办法检查是否有可能检查文件系统操作(特别是写入)是否真的终止,避免close/kill在操作仍在 运行.
时进行处理更清楚一点:当我们的应用程序必须关闭时,我们必须执行一些操作(文件副本、写入等),并且我们必须知道(因为我认为它们是异步的)它们何时“真的完成了。
提前致谢 安德里亚
如果要确保所有写入都提交到存储并更新文件系统:
- 在文件描述符上调用 fsync(),
- 打开父目录并对该文件描述符调用 fsync()
当这两项都完成后,内核已从内存中清除所有内容,并确保文件系统已根据您操作的文件进行更新。
另一种方法是调用 sync(),这可确保将所有内核数据写入所有文件和文件系统元数据的存储空间。
注:
如果您的应用程序正在使用 FILE* 而不是文件描述符,您需要首先确保写入的数据从您的应用程序刷新到内核,方法是调用 fflush() 或 fclose FILE*
如果你杀死一个应用程序,它执行的任何写操作都不会被取消或中断,你可以通过调用 sync() 或打开同一个文件并调用来确保它已提交到存储fsync() 就可以了。
如果你任意终止一个应用程序,你不能指望一切都是一致的,也许应用程序正在对数据库、配置文件等进行 2 次重要写入,而你在 1 次之后终止了它写入,根据文件格式,文件可能已损坏。