您好,登錄后才能下訂單哦!
怎么在Linux中調用fsync函數?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
功能描述:
同步內存中所有已修改的文件數據到儲存設備。
用法:
#include <unistd.h>
int fsync(int fd);
參數:
fd:文件描述詞。
返回說明:
成功執行時,返回0。失敗返回-1,errno被設為以下的某個值
EBADF: 文件描述詞無效
EIO : 讀寫的過程中發生錯誤
EROFS, EINVAL:文件所在的文件系統不支持同步
強制把系統緩存寫入文件sync和fsync函數,, fflush和fsync的聯系和區別2010-05-10 11:25傳統的U N I X實現在內核中設有緩沖存儲器,大多數磁盤I / O都通過緩存進行。當將數據寫
到文件上時,通常該數據先由內核復制到緩存中,如果該緩存尚未寫滿,則并不將其排入輸出
隊列,而是等待其寫滿或者當內核需要重用該緩存以便存放其他磁盤塊數據時,再將該緩存排
入輸出隊列,然后待其到達隊首時,才進行實際的I / O操作。這種輸出方式被稱之為延遲寫
(delayed write)(Bach 〔1 9 8 6〕第3章詳細討論了延遲寫)。延遲寫減少了磁盤讀寫次數,但是
第4章文件和目錄8 7
下載
卻降低了文件內容的更新速度,使得欲寫到文件中的數據在一段時間內并沒有寫到磁盤上。當
系統發生故障時,這種延遲可能造成文件更新內容的丟失。為了保證磁盤上實際文件系統與緩
存中內容的一致性,U N I X系統提供了s y n c和f s y n c兩個系統調用函數。
#include <unistd.h>
void sync(void);
int fsync(intf i l e d e s) ;
返回:若成功則為0,若出錯則為-1
s y n c只是將所有修改過的塊的緩存排入寫隊列,然后就返回,它并不等待實際I / O操作結束。
系統精靈進程(通常稱為u p d a t e )一般每隔3 0秒調用一次s y n c函數。這就保證了定期刷新內
核的塊緩存。命令s y n c ( 1 )也調用s y n c函數。
函數f s y n c只引用單個文件(由文件描述符f i l e d e s指定),它等待I / O結束,然后返回。f s y n c可
用于數據庫這樣的應用程序,它確保修改過的塊立即寫到磁盤上。比較一下f s y n c和O _ S Y N C標
志(見3 . 1 3節)。當調用f s y n c時,它更新文件的內容,而對于O _ S Y N C,則每次對文件調用w r i t e
函數時就更新文件的內容。
fflush和fsync的聯系和區別
[zz ] http://blog.chinaunix.net/u2/73874/showart_1421917.html
1.提供者fflush是libc.a中提供的方法,fsync是系統提供的系統調用。2.原形fflush接受一個參數FILE *.fflush(FILE *);fsync接受的時一個Int型的文件描述符。fsync(int fd);3.功能fflush:是把C庫中的緩沖調用write函數寫到磁盤[其實是寫到內核的緩沖區]。fsync:是把內核緩沖刷到磁盤上。
c庫緩沖-----fflush---------〉內核緩沖--------fsync-----〉磁盤
關于怎么在Linux中調用fsync函數問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。