練習(xí)8-3

_flushbuf這個函數(shù)與教材書上的沒什么太大區(qū)別,思路是一樣的.

首先判斷fp文件是否在表示已經(jīng)打開的數(shù)組_iob中
因為LINUX要對文件操作都需要先打開該文件.

然后判斷該文件是否是需要寫操作.只有寫操作才用的上_flushbuf

然后判斷是否需要緩沖區(qū).并以此設(shè)置緩沖區(qū)大小.

然后如果緩沖區(qū)未設(shè)置,將開辟一塊緩沖區(qū)供其使用,如果遇到錯誤.那么將文件狀態(tài)設(shè)置為出錯.并返回EOF.

如果緩沖區(qū)已經(jīng)存在,就判斷緩沖區(qū)中的內(nèi)容有多少.保存在nc中.
然后將緩沖區(qū)base指向的nc個字符寫入文件中.如果寫入的數(shù)量與緩沖區(qū)中不一樣,則表明發(fā)生了錯誤.

因為需要將已經(jīng)傳到_flushbuf函數(shù)的第一個參數(shù)那個字符也放入緩沖區(qū).所以整體的緩沖區(qū)容量要-1.來容納它.
這個是因為putc會一直會向緩沖區(qū)中寫入字符,如果緩沖區(qū)滿了,則會將最后這個字符以參數(shù)的形式傳給_flishbuf,用他來重置緩沖區(qū),而這個字符自然不能丟,所以直接就寫入了緩沖區(qū).

然后先看fflush函數(shù).

先判斷是否程序已經(jīng)打開該文件.
然后如果是寫的方式打開的文件,就調(diào)用_flushbuf函數(shù).
_flushbuf函數(shù)會將緩沖區(qū)的內(nèi)容用write系統(tǒng)調(diào)用寫入文件中.而那個參數(shù)0會在寫入文件之后才寫入已經(jīng)被刷新的緩沖區(qū)中.而這個緩沖區(qū)等一下就會被fclose釋放.所以不用在意.

fclose就是釋放這個文件指針.
首先通過fflush將緩沖區(qū)的數(shù)據(jù)寫入文件沒出錯的話繼續(xù)向下.
釋放緩沖區(qū)空間.
重置指針,計數(shù)器和打開方式.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容