小编Pet*_*720的帖子

如何在 Linux 中使用 C 原子和异步地编写文件

如何在不需要我的程序等待慢速物理媒体(例如 with fsync)的情况下自动更新文件?

我希望操作系统可以在 RAM 中“缓冲”典型fsyncrename操作,然后方便时以正确的顺序将它们写入磁盘。


背景

我正在开发在带有ext4文件系统的自定义嵌入式 Linux 环境中运行的软件。该程序定期更新磁盘上的文件。我需要在不牺牲应用程序性能的情况下保持该文件的完整性。

根据我的阅读安全更新文件的公认做法如下:

  1. 创建一个新的临时文件
  2. 将数据写入临时文件
  3. fsync() 临时文件
  4. 将临时文件重命名为适当的名称
  5. fsync() 包含目录

这个过程对我来说很有意义,但在我的特定应用程序中,我想避免对fsync(). 我不在乎数据何时写入磁盘,只要文件始终处于有效状态即可。如果文件已过期,那没关系。


到目前为止我学到了什么

似乎已经有相当多的讨论ext4和正确使用fsync. 如果我理解正确,我可能可以放弃使用fsyncif auto_da_allocis enabled for my filesystem ( link ),但我不相信这是最好的解决方案。

c linux fsync embedded-linux ext4

5
推荐指数
1
解决办法
278
查看次数

标签 统计

c ×1

embedded-linux ×1

ext4 ×1

fsync ×1

linux ×1