代码之家  ›  专栏  ›  技术社区  ›  CIsForCookies

如果在“同步”之前关闭设备会发生什么[[关闭]

  •  -1
  • CIsForCookies  · 技术社区  · 7 年前

    "my_file.txt" . 我曾经 cat

    1. 文件的创建和内容的复制是在不同的阶段进行的吗(允许阶段(存在0字节的文件)
    2. 有没有可能我“看到”了文件 [意思是我成功地 cat "my_file.txt" ] ,但实际上我看到的是一个缓存版本,它在重新启动后不会出现,除非 sync 会被叫来吗?

    顺便说一句,Linux什么时候刷新文件系统?我知道 stdout 例如,当 "\n" 是引入的[并且可以以某种方式配置,不记得具体是如何配置的]。文件系统也有规则吗?

    3 回复  |  直到 7 年前
        1
  •  0
  •   nos    7 年前

    对。文件的正常操作是

    1. 读/写数据。

    有没有可能我“看到”了这个文件[意味着我成功地编辑了“my\u file.txt”],但实际上我看到的是一个缓存版本,它在重新启动后不会出现,除非调用同步?

    对。如果上面的步骤1已同步到硬盘,但步骤2未同步,则会丢失文件内容。

    顺便说一句,Linux什么时候刷新文件系统?我知道,例如,当引入“\n”时,stdout(默认情况下)会被刷新[并且可以以某种方式进行配置,不记得具体是如何配置的]。文件系统也有规则吗?

    请注意,在许多级别上都有刷新/同步。您所说的“当引入“\n”时”刷新只是从程序到操作系统的刷新。然后,操作系统可能只将数据保存在RAM中,然后将其刷新到硬盘驱动器中。

    通常你可以运行 sync

        2
  •  1
  •   Jean-Baptiste Yunès    7 年前
    1. 文件的创建和内容的复制是在不同的阶段进行的吗(允许阶段(存在0字节的文件)

    open() 然后 write() 之后。。。打开 O_CREAT

    1. 有没有可能我“看到”了这个文件[意味着我成功地找到了“my_file.txt”],但实际上看到的是一个缓存文件 重新启动后将不存在的版本,除非需要同步 残余

    没错,您看到的是以前操作的缓存版本。

    Linux何时刷新文件系统?

    一般的规则是内核在需要的时候刷新东西。你唯一能做的就是要求冲水,但唉,即使这只是一个要求,并不意味着冲水发生了,它只是意味着冲水将很快发生。相应的命令行是 sync .

    您可以挂载一个文件系统,请求以直接模式创建IOs,也可以逐个文件地请求它(请参阅 O_DIRECT open ). 但是请注意,直接模式通常会降低性能。。。

        3
  •  0
  •   Mohammad reza Kashi    7 年前

    如果您在项目中处理文件时关闭设备,则可能会销毁您的文件,例如,您希望删除文件的文档并再次写入其中。我的设备可能会在这两个阶段和文件销毁之间关闭。

    推荐文章