c - 文件什么时候真正写入磁盘?

标签 c architecture raspberry-pi

我正在使用 Raspberry Pi,将文件写入微型 SD 卡(10 类)以进行数据记录。如果 Pi 断电,我会注意到最后几个文件没有写入。每个文件的大小约为 3 KB。我知道这一点,因为我让 Pi 打印到屏幕上它所在的文件编号,当我重新启动时它返回了几个数字。

我曾尝试增加创建新文件的频率,但我丢失了相同数量的数据(我丢失了更多文件编号)。

我的问题是将文件写入物理 SD 卡的底层进程是什么?一旦它们实际位于卡上,它们就不会受到断电的影响。我的代码结构如下:

  • 打开新文件
  • fwrite 文件内容
  • fflush 将缓冲区刷新到文件
  • fclose 关闭文件指针
  • 用新文件重复

我唯一的理论是,一旦 Pi 关闭文件,MMU 就会异步写入 SD 卡,而留在“MMU 队列”中的文件会在断电时丢失。否则,如果 fflush 和 fclose 实际上没有写入磁盘,那么我不确定任何计算机在每次关闭时都不会经历这种损失。

最佳答案

IMO 文件被缓冲在 block 设备中,因此尝试使用“sync”选项挂载文件系统或使用 sync() 将更改的 block 强制写入磁盘。

关于c - 文件什么时候真正写入磁盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45353461/

相关文章:

tomcat - 端口转发(通过 2 个路由器)到树莓派 tomcat

python - 从树莓派录制视频并将其保存到外部硬盘驱动器

MySQL C API : Need example for initiating DB on *Embedded* mode

java - Java 中的多个 XML 消化

javascript - 如何在大型 vue.js 应用程序中构建组件?

c# - DAL 类(class)应该公开吗?

audio - 用于在两个树莓派之间流式传输多路复用 h.264 和 aac 音频的 gstreamer 管道

c++ - BLOB 上的核心转储通过 ODBC 插入 informix

c - 为什么0的大小显示为4?

c++ - 在 c/c++ 中更改 Windows 服务的状态