安全的编程方式:fopen() -> fflush() -> fsync() -> fclose()
确保数据落盘的几种方法:
1.open(O_DIRECT):write/read时,文件系统的IO会绕过cache直接操作磁盘IO;
2.open(O_SYNC):确保每一笔IO都是同步落盘的,相当于是每次write后自动调用fsync;
3.open(O_DSYNC):相当于是每次write后自动调用fdatasync;
4.fsync: write后调用fsync刷新文件数据+元数据缓冲区;
5.fdatasync: write后调用fdatasync刷新文件数据;
6.sync: 标准IO后调用sync强制刷新内核缓冲区到磁盘,linux是文件真正落盘后才会返回;
7.msync: 通过mmap函数把文件映射到进程的地址空间,读写进程内存的地址的数据其实是转发到磁盘上去读写,write后调用msync强制刷盘。
Ensuring data reaches disk https://lwn.net/Articles/457667/
深入理解 Linux的I/O 系统
https://view.inews.qq.com/a/20211216A01H5600
怎么才能保证 IO 数据的安全
https://blog.csdn.net/FL63Zv9Zou86950w/article/details/116505686
缓存技术及算法策略简介
http://www.xupifu.com/2017/01/19/cache-introduction/