【问题标题】:file system operation really "flushed"文件系统操作真的“刷新”了
【发布时间】:2017-05-25 14:08:48
【问题描述】:

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

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

提前致谢 安德烈亚

【问题讨论】:

    标签: linux io filesystems yocto


    【解决方案1】:

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

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

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

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

    注意:

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

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

    • 1234563根据其格式可能会损坏。

    【讨论】:

    • 非常感谢您对我的问题的完整回答。 sync() 是我们需要的,因为我们的应用程序没有直接控制所有的复制/写入操作(它不知道所有涉及的文件描述符)。
    猜你喜欢
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2013-04-03
    相关资源
    最近更新 更多