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