日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux系统中fflush,sync,syncfs,fdatasync,fsync的比较

發布時間:2025/3/15 linux 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux系统中fflush,sync,syncfs,fdatasync,fsync的比较 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include <stdio.h> int fflush(FILE *stream);

fflush 是 C 標準庫提供的函數,對輸入輸出流起作用,起作用的是C標準庫管理的用戶空間文件緩存。對輸出流來說,會使用系統提供的寫文件系統調用(write)把標準庫緩存的數據寫入文件,fflush并不能保證數據真正的寫入文件系統。對輸入流來說,會把從可尋址的文件讀入標準庫緩存的數據給清洗掉。

#include <unistd.h> void sync(void); int syncfs(int fd);

sync 和 syncfs 起作用的是文件系統緩存,這些緩存是在內核空間管理的。sync 會把對文件系統的元數據、緩存的文件數據寫入所有底層的文件,對所有文件系統有用。syncfs 需要一個文件描述符,只寫入文件描述符指向的文件所在的文件系統上的數據。有時候突然拔掉優盤,里面的文件會損壞,就是因為優盤上文件的更改沒有從內核文件緩存寫入優盤所導致的。

在linux系統上,sync 和 syncfs 都是阻塞的,會確保數據寫入底層的文件系統。但是在POSIX標準里,sync可能在數據寫入之前返回。

#include <unistd.h> int fsync(int fd); int fdatasync(int fd);

fsync 把文件描述符fd指向的文件緩存在內核中的所有已修改的數據寫入文件系統,包含數據與文件元數據(文件大小,文件修改時間等)。但是fsync不會寫入對指向文件的目錄項的修改,也就是說如果新創建了一個文件,要是確保下次能正確讀出的話,就需要把所在目錄也fsync一下。

fdatasync 把和fsync作用差不多,但是不會寫入對下次正確讀取文件作用不大的一些元數據(比如上次訪問時間,上次修改時間等),但是大小如果改變了,是會寫進去的。

這兩個系統調用被調用后會阻塞,直到設備報告所有數據都已寫入(設備可能本身也有緩存)。

轉載于:https://www.cnblogs.com/kercker/p/8610988.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Linux系统中fflush,sync,syncfs,fdatasync,fsync的比较的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。