flushall
創(chuàng)新互聯(lián)專注于網(wǎng)站建設(shè),為客戶提供成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計開發(fā)服務(wù),多年建網(wǎng)站服務(wù)經(jīng)驗,各類網(wǎng)站都可以開發(fā),品牌網(wǎng)站制作,公司官網(wǎng),公司展示網(wǎng)站,網(wǎng)站設(shè)計,建網(wǎng)站費用,建網(wǎng)站多少錢,價格優(yōu)惠,收費合理。
添加義項?
函數(shù)名:?flushall
功?能:?清除所有緩沖區(qū)
用?法:?int?flushall(void);
程序例:
#include?stdio.h
int?main(void)
{
FILE?*stream;
/*?create?a?file?*/
stream?=?fopen("DUMMY.FIL",?"w");
/*?flush?all?open?streams?*/
printf("%d?streams?were?flushed.\n",
flushall());
/*?close?the?file?*/
fclose(stream);
return?0;
}
fflush()函數(shù)是標準的作法。
scanf("%*[^\n]%*c")是用掃描集將緩沖區(qū)中的字符全部讀取來實現(xiàn)清除緩沖區(qū)的動作。
%*〔^\n〕將逐個讀取緩沖區(qū)中的'\n'字符之前的其它字符,%后面的*表示將讀取的這些字符丟棄,前遇到'\n'字符時便停止讀取操作,此時,緩沖區(qū)中尚有一個'\n'字符遺留,所以后面的%*c將讀取并丟棄這個遺留的換行符,這里的星號和前面的星號作用相同。由于所有從鍵盤的輸入都是以回車結(jié)束的,而回車會產(chǎn)生一個'\n'字符,所以將'\n'連同它之前的字符全部讀取并丟棄之后,也就相當于清除了輸入緩沖區(qū)。
是I/O 函數(shù)分為“帶緩沖”的和“不帶緩沖”的兩類。
帶緩沖的 I/O 函數(shù)寫數(shù)據(jù)時,并不直接寫磁盤介質(zhì),而是將數(shù)據(jù)先寫到這塊內(nèi)存緩沖中,之后用戶空間緩沖中的數(shù)據(jù)會被傳送到系統(tǒng)緩沖中。
linux 內(nèi)核會將系統(tǒng)緩沖中的數(shù)據(jù)送完磁盤驅(qū)動器(fsync函數(shù)可以加速這一過程),這之后,數(shù)據(jù)才真正的被寫入磁盤。
因為目前內(nèi)存的讀寫速度往往遠大于硬盤的讀寫速度(常 ms 級)。因此,緩沖區(qū)的建立可以盡力避免太過頻繁的寫磁盤。
對于硬盤來說,寫入一個字節(jié)可能跟寫入一個扇區(qū)沒什么兩樣,程序員每次寫入的數(shù)據(jù)也許就幾個字節(jié),所以可以將每次寫入的幾個字節(jié)放入緩沖區(qū),排列組合成一整塊數(shù)據(jù)再寫入,也能極大的提升效率。
擴展資料
1、帶緩沖的 I/O 讀函數(shù)讀取數(shù)據(jù)之前,則會首先判斷用戶空間的進程緩沖區(qū)是否包含數(shù)據(jù),如果沒有,則繼續(xù)判斷系統(tǒng)緩沖區(qū)是否包含數(shù)據(jù)。
2、“帶緩沖”的 I/O 讀函數(shù)從磁盤讀取數(shù)據(jù)時,并不只讀取調(diào)用者指定的讀取字節(jié)數(shù)。讀函數(shù)可能一次性讀取一個扇區(qū)(常常是 512B)保存在緩沖區(qū)里,只返回給程序員需要的 10 字節(jié)。