linux下檔案緩衝詳解

2021-12-30 10:25:36 字數 1634 閱讀 4012

linux下的檔案的緩衝

在linux下高階檔案程式設計中也講到:

所謂檔案寫緩衝,是指檔案流在執行輸出操作時,並不立刻將資料寫入檔案,而是先把資料累計到緩衝區,再以塊為單位批量輸出到檔案中,同理,檔案讀緩衝是指 檔案流在執行輸入操作時,以塊為單位讀取檔案內容,多餘的資料儲存在記憶體中。如果下次讀操作的內容剛好在同一塊中,則可以直接返回結果,避免一次輸入操 作。通過緩衝技術,可以減少低階i/o函式read和write函式的呼叫次數,從而大大提高軟體執行效率。

1)緩衝模式

標準檔案程式設計庫採用file型別描述檔案流,與低階i/o函式相比,最大的特性就是應用及增加了緩衝功能(低階i/o函式只使用了檔案系統自帶的緩衝功能),檔案的輸入輸出以"緩衝塊"為單位批量完成,並且根據"緩衝塊"大小,提供了三種緩衝模式。

(1)全緩衝(_iofbf):一般讀寫普通磁碟檔案採用全緩衝模式。

(2)行緩衝(_iolbf):比如呼叫fgets函式從標準輸入流stdin中輸入字元,當且僅當客戶輸入回車換行時,函式才返回。

(3)無緩衝(_ionbf):比如stderr採用無緩衝模式;

2)緩衝函式

#include 

void setbuf(file *stream,char *buf); 

int setvbuf(file *stream,char *buf,int type,size_t size); 

int fflush(file *stream); 

setbuf設定檔案流stream的緩衝區,引數buf指向乙個大小為bufsiz的記憶體塊,呼叫成功後,檔案流stream使用該記憶體塊作為新的緩衝區。倘若buf是空指標null,檔案流stream的緩衝將被完全關閉。緩衝區記憶體塊的定義一般為:

char buf[bufsiz]; ---其中bufsiz是stdio.h中的常數,代表緩衝區的大小,常為256的整數倍。

setvbuf設定了檔案流stream的緩衝區和緩衝模式,緩衝模式由引數type確定.

_iofbf(滿緩衝):當緩衝區為空時,從流讀入資料。或者當緩衝區滿時,向流寫入數 據。

_iolbf(行緩衝):每次從流中讀入一行資料或向流中寫入一行資料。   _ionbf(無緩衝):直接從流中讀入資料或直接向流中寫入資料,而沒有緩衝區。

任何時候,都可以使用fflush重新整理緩衝區,並將緩衝區的內容強制輸出到檔案中,引數stream指明了更新的 檔案流,當其值為null時,系統將重新整理全部檔案流的緩衝區。

例項:#include 

void main() 

編譯執行:

root@qingcheng-virtual-machine:~# gcc -o buf1 buf1.c

root@qingcheng-virtual-machine:~# ./buf1

2---2    1---1    3---3 

4--4 

如果去掉fflush的注釋,則結果如下:

root@qingcheng-virtual-machine:~# gcc -o buf1 buf1.c

root@qingcheng-virtual-machine:~# ./buf1

1---1    2---2    3---3 

4--4 

這是因為stdout是行緩衝,stderr是無緩衝,仔細理解。

作者「pstary」

Linux下檔案掛載詳解

mount hv mount a ffnrsvw t vfstype mount fnrsvw o options device dir mount fnrsvw t vfstype o options device dir 引數 v 顯示程式版本 h 顯示輔助訊息 v 顯示較訊息,通常和 f 用來...

Linux下檔案屬性詳解

root localhost ls l總計 160 rw r r 2 root root 762 07 29 18 19 aexit rw r r 2 root root 762 07 29 18 19 exit 此時exit 和aexit稱為互為硬鏈結。同指向乙個檔案,無論是修改哪乙個檔案,另乙個...

linux環境下檔案許可權詳解

在linux系統中644 755 777三種許可權是非常重要的一些許可權了,下面我來詳細的介紹644 755 777三種許可權的使用,希望對各位有幫助。444 r r r 600 rw 644 rw r r 666 rw rw rw 700 rwx 744 rwxr r 755 rwxr xr x ...