目录
fwrite,fflush-----linux编程写文件注意问题(fwrite没有直接写入文件)
fread,fwrite数据写入磁盘的流程
2019-11-07 09:28:08
fwrite,fflush
fwrite,fflush,你不知道的事!_zhangxiong2532的博客-CSDN博客_fwrite和fflush
fread,fwrite>> CLib buffer内存缓冲(用户空间) -->fflush>>page cache内核缓冲--->fsync>>磁盘
fflush:标准I/O函数(如:fread,fwrite)会在内存建立缓冲,该函数刷新内存缓冲,将内容写入内核缓冲,要想将其写入磁盘,还需要调用fsync。(先调用fflush后调用fsync,否则不起作用)。
sync、fsync、fdatasync、fflush函数区别和使用举例_lhb0709的博客-CSDN博客_fsync
调用fwrite后,把数据从application buffer 拷贝到了 CLib buffer,即C库标准IObuffer。fwrite返回后,数据还在CLib buffer,如果这时候进程core掉。这些数据会丢失。没有写到磁盘介质上。当调用fclose的时候,fclose调用会把这些数据刷到高速缓冲块,如果不手动调用fsync,fclose之后掉电再查看数据可能没有刷到磁盘上。
除了fclose方法外,还有一个主动刷新操作fflush 函数,不过fflush函数只是把数据从CLib buffer 拷贝到page cache 中,并没有刷新到磁盘上,从page cache刷新到磁盘上可以通过调用fsync函数完成。
从上面类子看到,一个常用的fwrite函数过程,基本上历经千辛万苦,数据经过多次copy,才到达目的地。有人心生疑问,这样会提高性能吗,反而会降低性能吧。这个问题先放一放。
有人说,我不想通过fwrite+fflush这样组合,我想直接写到pag