中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

有哪些緩沖類型

發布時間:2021-10-25 10:25:30 來源:億速云 閱讀:147 作者:iii 欄目:web開發

這篇文章主要介紹“有哪些緩沖類型”,在日常操作中,相信很多人在有哪些緩沖類型問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”有哪些緩沖類型”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

緩沖

為了減少使用read和write調用的次數,標準IO庫提供了緩沖,有人可能會問,為什么要減少它們的調用次數?很明顯read和write是系統調用,它們花費的時間將會更多,本文不展開描述。那么有哪三種緩沖類型呢?

全緩沖

在全緩沖的情況下,在填滿標準I/O緩沖區后,才進行實際的I/O操作。寫磁盤文件通常就是全緩沖的。舉個例子:

#include<stdio.h> #include<unistd.h> int main(void) {     /*以可讀可寫的方式打開*/     FILE *fp = fopen("./test.txt","w+");     if(NULL == fp)     {         perror("open file failed");         return -1;     }     /*寫入內容*/     char buf[] = "wechat:shouwangxiansheng\n";     fwrite(buf,sizeof(char),sizeof(buf),fp);     //fflush(fp);     /*sleep一段時間,以便觀察*/     sleep(20);     fclose(fp);     return 0; }

打開一個文件,并向里面寫入一段字符串。我們編譯并運行:

$ gcc -o buff buff.c $ cat test.txt wechat:shouwangxiansheng $ ./buff

此時觀察test.txt:

$ cat test.txt

發現它的內容是空!明明已經寫入了為什么會什么東西都沒有?原因在于它默認是全緩沖的,因此在將內容寫入文件后,并沒有直接存在文件中,當程序關閉文件或者程序運行完成退出后,再次查看:

發現文件已經有了內容。除了等待程序運行完成,還可以使用fflush函數,它可以將緩沖區中的內容寫入到磁盤中(終端驅動設備表示丟棄緩沖區的數據)。所以將fwrite下面一行的注釋去掉后,就可以發現,寫入之后,就可以直接在文件中看到內容了。所以當你在寫一個文件,但是查看文件卻沒有任何寫入內容時,不要一直懷疑自己的代碼。

行緩沖

行緩沖指的是當遇到換行符時,或者緩沖區已經滿了(一般1024字節),標準I/O庫執行I/O操作。同樣舉個例子:

#include<stdio.h> #include<unistd.h> int main(void) {     printf("wechat:shouwangxiansheng");     sleep(10);     return 0; }

編譯運行上面的程序:

$ gcc -o lineBuff lineBuff.c $ ./lineBuff

你會發現,printf執行完了之后,內容并沒有馬上輸出到終端,而是在程序運行完之后才輸出。聰明的你當然也知道,要想打印完后直接輸出到終端,只需要改成下面這樣就可以了:

printf("wechat:shouwangxiansheng\n");

不帶緩沖

這個從字面就可以理解其意思了。同樣舉個例子:

noBuff.c*/ #include<stdio.h> #include<unistd.h> int main(void) {     fprintf(stderr,"wechat:shouwangxiansheng");     sleep(10);     return 0; }

編譯運行你就會發現,運行完fprintf語句后,內容直接輸出在終端,而不需要等到換行。一般來說,標準錯誤是不帶緩沖的。

總結

通過上面的一些例子,我們也發現了這樣一些規律:

  • 通常磁盤上的文件是全緩沖區的

  • 標準輸入和標準輸入通常是行緩沖的

  • 指向終端設備的流通常是行緩沖,而指向文件時,則是全緩沖

  • 為了盡可能顯示錯誤信息,標準錯誤是不帶緩沖的

到此,關于“有哪些緩沖類型”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

通河县| 醴陵市| 资源县| 鞍山市| 乐都县| 饶阳县| 榆中县| 永清县| 区。| 古蔺县| 沂源县| 富蕴县| 湘潭县| 余姚市| 天柱县| 喀喇沁旗| 抚州市| 富川| 休宁县| 商河县| 云南省| 新源县| 城步| 正蓝旗| 高邑县| 桦南县| 平山县| 佛教| 阿克苏市| 武清区| 镶黄旗| 米林县| 阆中市| 杨浦区| 洛扎县| 保靖县| 原平市| 阿拉尔市| 建瓯市| 平山县| 将乐县|