久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

關(guān)于I/O緩沖區(qū)

 魚之雨 2014-12-11

緩沖區(qū)

作用:在實(shí)際編程中,I/O速度取決于顯示器,、鍵盤,、硬盤等I/O設(shè)備的性能,而這些設(shè)備比起CPU和內(nèi)存是比較慢的,。因此系統(tǒng)采用緩沖區(qū)的方式來減少I/O的讀寫,,以便提高系統(tǒng)性能。

I/O的緩沖區(qū)的種類:1,、無緩沖,;2、行緩沖,;3,、全緩沖。

一,、行緩沖:

看一個(gè)例子:

  1. #include <stdio.h>  
  2.   
  3. int main(void)  
  4. {  
  5.     printf("123\n456");  
  6.     while(1){}  
  7.     return 0;  
  8. }  

結(jié)果:

  1. 123  
  2.    

這段代碼只輸出了“123\n”而沒有輸出“456”,。原因是標(biāo)準(zhǔn)I/O:stdin,stdout是行緩沖。

行緩沖的特性是:C標(biāo)準(zhǔn)輸出先寫到行緩沖區(qū)里,,當(dāng)遇到下列四種情況才一次性把行緩沖區(qū)的數(shù)據(jù)寫到I/O設(shè)備里去:

1,、遇到\n字符;

2,、行緩沖區(qū)(linux默認(rèn)大小為1024字節(jié))被填滿后,。

3,、調(diào)用沖洗緩沖區(qū)的函數(shù):fflush等。

4,、進(jìn)程返回,、調(diào)用exit退出、文件流關(guān)閉等,。

上例中printf的作用是把"123\n456"依次寫入緩沖區(qū),,由于中途遇到\n,因此立即會(huì)把緩沖區(qū)里的所有數(shù)據(jù)——"123\n"寫入I/O設(shè)備(此處是屏幕),,接著的是把“456”寫到緩沖區(qū)里,。“456”之后沒有“\n”,、緩沖區(qū)又沒有滿,、程序死循環(huán)在while(1)里沒有結(jié)束,因此“456”將永遠(yuǎn)不會(huì)輸出到I/O設(shè)備里,。

屬于行緩沖的I/O設(shè)備通常是需要交互的I/O:鍵盤(默認(rèn)的stdin),屏幕(默認(rèn)的stdout)等,。

二、全緩沖

還是上面的代碼(假設(shè)生成的執(zhí)行程序名為“a.ex”,,并且目錄下有個(gè)“b.txt”的文本),,如果這樣啟動(dòng):

  1. $ a.ex > b.txt  

那么程序?qū)⒉粫?huì)輸出任何字符到b.txt中。

因?yàn)閷?duì)于文件(文件是在硬盤上的),,硬盤I/O屬于全緩沖,。

緩沖的特性是:C標(biāo)準(zhǔn)輸出先寫到緩沖區(qū)里,當(dāng)遇到下列三種情況才一次性把緩沖區(qū)的數(shù)據(jù)寫到I/O設(shè)備里去:

1,、緩沖區(qū)被填滿后,。

2、調(diào)用沖洗緩沖區(qū)的函數(shù):fflush等,。

3,、進(jìn)程返回、調(diào)用exit退出,、文件流關(guān)閉等,。

上例中啟動(dòng)a.ex程序時(shí),用重定向符號(hào)“>”將stdout重定向到b.txt里,。由于b.txt是文件,,屬于硬盤I/O,所以并滿足全緩沖的寫入條件,。

屬于全緩沖的I/O設(shè)備有:硬盤等,。

三、無緩沖

  1. #include <stdio.h>  
  2. #include <unistd.h>  
  3. int main(void)  
  4. {  
  5.     write(STDOUT_FILENO,"123\n456",7);  
  6.     while(1){}  
  7.     return 0;  
  8. }  

結(jié)果是:

  1. 123  
  2. 456  

沒錯(cuò),,無緩沖會(huì)直接將字符串寫入I/O設(shè)備里去,。

write寫文件或者屏幕等設(shè)備都是無緩沖的,;stderr無論重定向到哪里都是無緩沖的。


四,、最后補(bǔ)充一些注意:

  1. #include <unistd.h>  
  2. #include <stdio.h>  
  3. int main(void)  
  4. {  
  5.     printf("123\n456");  
  6.     _exit(0);  
  7. }  

結(jié)果是:

  1. 123  
  2.    

因?yàn)閡nix系統(tǒng)中_exit 函數(shù)并不沖洗緩沖區(qū),。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多