flushall
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序定制開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了紹興免費建站歡迎大家使用!
添加義項?
函數(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;
}
1、fflush(stdin)是清空輸入緩沖區(qū)的意思。stdin就是標(biāo)準(zhǔn)輸入 std即standard(標(biāo)準(zhǔn)),in即input(輸入),合起來就是標(biāo)準(zhǔn)輸入。 一般就是指鍵盤輸入到緩沖區(qū)里的東西。
2、在清除文件緩沖區(qū)時使用,文件以寫方式打開時將緩沖區(qū)內(nèi)容寫入文件。
例:
#include conio.h
#include io.h
#include stdio.h
#include string.h
void flush(FILE *stream);
int main(void)
{
FILE *stream;
char msg[] = "This is a test";
/* create a file */
stream = fopen("DUMMY.FIL", "w");
/* write some data to the file */
fwrite(msg, strlen(msg), 1, stream);
clrscr();
printf("Press any key to flush DUMMY.FIL:");
getch();
/* flush the data to DUMMY.FIL without closing it */
flush(stream);
printf("\nFile was flushed, Press any key to quit:");
getch();
return 0;
}
void flush(FILE *stream)
{
int duphandle;
/* flush the stream's internal buffer */
fflush(stream);
/* make a duplicate file handle */
duphandle = dup(fileno(stream));
/* close the duplicate handle to flush the DOS buffer */
close(duphandle);
}
擴展資料
使用fflush的注意事項
1、MSDN 文檔里也清楚地寫著:fflush on input stream is an extension to the C standard (fflush 操作輸入流是對C標(biāo)準(zhǔn)的擴充)。以下是 C99 對 fflush 函數(shù)的定義:int fflush(FILE *stream);
2、如果stream指向輸出流或者更新流(update stream),并且這個更新流最近執(zhí)行的操作不是輸入,那么fflush函數(shù)將把任何未被寫入的數(shù)據(jù)寫入stream指向的文件(如標(biāo)準(zhǔn)輸出文件stdout)。
3、fflush函數(shù)的行為是不確定的。fflush(NULL)清空所有輸出流和上面提到的更新流。如果發(fā)生寫錯誤,flush函數(shù)會給那些流打上錯誤標(biāo)記,并且返回EOF,否則返回0。
4、如果 stream 指向輸入流(如 stdin),那么 fflush 函數(shù)的行為是不確定的。故而使用 fflush(stdin) 是不正確的。
參考資料來源:百度百科—fflush(stdin)
是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)存的讀寫速度往往遠(yuǎn)大于硬盤的讀寫速度(常 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é)。
while(getchar()!='n'); -- 應(yīng)當(dāng)是 while(getchar()!='\n'); 這是不斷循環(huán)取字符,直到取到 Enter 鍵時結(jié)束循環(huán)。作用,清除上面一次輸入時殘留在輸入流中的字符。\x0d\x0a改用 fflush(stdin); 更佳。\x0d\x0aret = scanf("%d,%d",a,b); ret 為成功讀得的數(shù)據(jù)個數(shù)。\x0d\x0a清除的緩沖區(qū)中的殘留數(shù)據(jù): if (ret != 2) fflush(stdin);