C語言IO操作fread/fwrite/fflush-創(chuàng)新互聯(lián)

參考
1
2

成都創(chuàng)新互聯(lián)從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務公司,擁有項目網(wǎng)站制作、做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元大廠做網(wǎng)站,已為上家服務,為大廠各地企業(yè)和個人服務,聯(lián)系電話:13518219792

IO操作

fread/fwrite/fflush:

  1. c語言標準規(guī)定的io流操作,建立在read/write/fsync之上;
  2. 在用戶層, 又增加了一層緩沖機制,用于減少內(nèi)核調(diào)用次數(shù),但是增加了一次內(nèi)存拷貝;

read/write/fsync:

  1. linux底層操作;
  2. 內(nèi)核調(diào)用, 涉及到進程上下文的切換,即用戶態(tài)到核心態(tài)的轉(zhuǎn)換,這是個比較消耗性能的操作;

兩者之間的關(guān)系如下:
在這里插入圖片描述
可以將fread,fwrite是一種批量寫入,而read,write是單次寫入的形式來理解。
write是系統(tǒng)調(diào)用,每次需要將數(shù)據(jù)寫到磁盤,寫的大小是要求的大小,依然涉及頻繁的用戶態(tài)和內(nèi)核態(tài)切換;
fwrite是庫函數(shù),每次將數(shù)據(jù)寫入到緩沖區(qū),等緩沖區(qū)滿了,一次寫入磁盤?;蛘呤褂?fflush 沖洗緩沖區(qū);
fflush:是把C庫中的緩沖調(diào)用write函數(shù)寫到磁盤(其實是寫到內(nèi)核的緩沖區(qū))。
fsync:是把內(nèi)核緩沖刷到磁盤上。

注意:

(1)fwrite
fwrite每次將數(shù)據(jù)寫入到緩沖區(qū),等緩沖區(qū)滿了,一次寫入磁盤;存在延遲寫入、或?qū)€程訪問文件數(shù)據(jù)異常問題;為解決該問題,可使用fflush()函數(shù),及時刷新緩存、寫入;
(2)fflush:標準I/O函數(shù)(如:fread,fwrite)會在內(nèi)存建立緩沖,該函數(shù)刷新內(nèi)存緩沖,將內(nèi)容寫入內(nèi)核緩沖,要想將其寫入磁盤,還需要調(diào)用fsync。(先調(diào)用fflush后調(diào)用fsync,否則不起作用)。
(3)fflush()與fsync()的聯(lián)系:
對于輸入設(shè)備,調(diào)用fsync/fflush將清空相應的緩沖區(qū),其內(nèi)數(shù)據(jù)將被丟棄;對于輸出設(shè)備或磁盤文件,fflush只能保證數(shù)據(jù)到達內(nèi)核緩沖區(qū),并不能保證數(shù)據(jù)到達物理設(shè)備, 因此應該在調(diào)用fflush后,調(diào)用fsync(fileno(stream)),確保數(shù)據(jù)存入磁盤。
(4)fdatasync:類似fsync,但它只影響文件的數(shù)據(jù)部分;
fdatasync與fsync的區(qū)別在于fdatasync不會flush文件的metadata信息;這個是為了減少對磁盤的操作;如果以塊為單位知道寫入多少數(shù)據(jù),可以使用fdatasync;
如下:

#include#include#include#includeint main(int argc, char **argv){FILE *fp = fopen("test.txt","w");
        char *line ="Test";
        char *fill ="\0";
        fwrite(fill, 1, 100*strlen(line), fp);
        fflush(fp);
        fsync(fileno(fp));
        rewind(fp);
        for (int i = 0; i< 100; i++){fwrite(line, strlen(line), 1, fp);
                fflush(fp);
                fdatasync(fileno(fp));
        }
}

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)頁標題:C語言IO操作fread/fwrite/fflush-創(chuàng)新互聯(lián)
瀏覽路徑:http://muchs.cn/article14/hecde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、移動網(wǎng)站建設(shè)、企業(yè)建站、用戶體驗云服務器、網(wǎng)站設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司