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

标签 linux io filesystems yocto

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

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

提前致谢 安德里亚

最佳答案

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

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

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

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

注意:

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

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

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

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

相关文章:

java - Linux - 格式化 ls -l 命令

linux - 哪个更好,curl 还是 wget?

safari - Tampermonkey 脚本存储在 Safari 中的什么位置

c++ - 如何在不打开文件的情况下使用 boost 文件系统创建文件

linux - WebDriver异常: no chrome binary at/usr/bin/google-chrome-stable or chrome binary not found

c - linux共享c库不共享

haskell - 用 Haskell 编写的简单解释器,将打印输出保存到最后,而不是遇到打印语句时

java - PushbackReader 等效项

c++ - 检查输出顺序是否正确

spring-mvc - 单击缩略图并在浏览器中显示 3d 模型