gpt4 book ai didi

c - 如果我在 "sync"之前关闭设备会发生什么?

转载 作者:行者123 更新时间:2023-11-30 19:04:00 28 4
gpt4 key购买 nike

我有一个嵌入式设备(Linux + BusyBox),我在上面加载了一个文件 "my_file.txt" 。我用过cat检查了文件内容,结果令人满意。然后,我拔掉插头,重新启动后,我看到文件仍然在那里,但大小为 0 字节...

这可能是由不同步的文件系统引起的吗?这实际上是一个双面问题:

  1. 文件的创建和其内容的副本是否发生在不同的阶段? (允许存在 0 字节文件的阶段)
  2. 我是否有可能“看到”该文件[意思是我成功地设法cat "my_file.txt" ],但我实际看到的是一个缓存版本,重启后不会出现,除非 sync会被叫吗? “不在那里”是指内容,因为文件本身仍然存在

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

最佳答案

  1. Is the createion of a file and the copy of its contens happen in different stages? (allowing a phase wehre a file with 0 bytes exists)

是的,复制文件不是原子操作,因为您首先调用 open(),然后调用 write()... 使用 O_CREAT 打开 模式将创建一个空文件,所以是的:首先是一个空文件,然后填充。

  1. Is it possible that I "see" the file [meaning I successfully managed to cat "my_file.txt"], but what I actually see, is a cached version that will not be there after reboot, unless a sync will be called? and by "not be there" I mean the contens, as the file itself remains

是的,您看到的是之前操作的缓存版本。

when does Linux flush filesystems?

一般规则是内核在需要时刷新内容。你唯一能做的就是请求冲水,但可惜的是,即使这只是一个请求,并不意味着冲水发生了,它只是意味着冲水很快就会发生。对应的命令行是sync

Is there a rule for filesystems as well?

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

关于c - 如果我在 "sync"之前关闭设备会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53150620/

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