gpt4 book ai didi

linux - 文件系统操作真的 "flushed"

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:07:17 27 4
gpt4 key购买 nike

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

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

提前致谢安德里亚

最佳答案

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

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

当这两个都完成后,内核已经从内存中清除了所有内容,并确保文件系统根据您操作的文件进行了更新。

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

注意:

  • 如果您的应用程序正在使用 FILE* 而不是文件描述符,您需要首先确保写入的数据从您的应用程序刷新到内核,方法是调用 fflush() 或 fclose FILE*

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

  • 如果您任意终止一个应用程序,您不能指望一切都保持一致,也许该应用程序正在对数据库、配置文件等进行 2 次重要写入,而您在第 1 次写入后终止了它,该文件根据其格式可能已损坏。

关于linux - 文件系统操作真的 "flushed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44182645/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com