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 ...