我正在使用 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/