日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

全缓冲、行缓冲和无缓冲

發(fā)布時間:2023/11/30 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 全缓冲、行缓冲和无缓冲 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這里的緩沖是指的是用戶空間的I/O緩沖區(qū),不是內(nèi)核緩沖。

無緩沖:用戶層不提供緩沖,數(shù)據(jù)流直接到內(nèi)核緩沖,再到磁盤等外設上。標準錯誤輸出(2)通常是無緩存的,因為它必須盡快輸出,且是輸出到具有交互式的設備上,如屏幕,不是磁盤。

行緩沖:在I/O緩沖區(qū)中遇到換行符或者緩沖區(qū)寫滿時,就自動把數(shù)據(jù)送到內(nèi)核緩沖區(qū)標準輸入(0)和標準輸出(1)對應終端設備時通常是行緩沖的。另外,在程序結(jié)束時;main函數(shù)中return時(代表程序執(zhí)行結(jié)束);main函數(shù)調(diào)用exit函數(shù)時(結(jié)束當前進程);C庫函數(shù)fflush時或關(guān)閉文件時,也會將I/O緩沖的數(shù)據(jù)刷到內(nèi)核中,然后送到外設上。

全緩沖:如果緩沖區(qū)寫滿了就寫回內(nèi)核。常規(guī)文件的寫入寫出(磁盤)通常是全緩沖的。另外,在程序結(jié)束時;main函數(shù)中return時(代表程序執(zhí)行結(jié)束);main函數(shù)調(diào)用exit函數(shù)時(結(jié)束當前進程);C庫函數(shù)fflush時或關(guān)閉文件時,也會將I/O緩沖的數(shù)據(jù)刷到內(nèi)核中,然后送到外設上。后兩種都是:數(shù)據(jù)-------I/O緩沖---------內(nèi)核緩沖-------外設。

上述都是I/O緩沖區(qū),其作用是減少read和write的次數(shù),即減少了系統(tǒng)調(diào)用,從而減少了系統(tǒng)開銷,提高了I/O速度。

內(nèi)核緩沖區(qū)。?從理論上講,內(nèi)核可以在任何時候?qū)懘疟P,但并不是所有的write操作都會導致內(nèi)核的寫動作。內(nèi)核會把要寫的數(shù)據(jù)暫時存在緩沖區(qū)中,積累到一定數(shù)量后再一次寫入。有時會導致意外情況,比如斷電,內(nèi)核還來不及把內(nèi)核緩沖區(qū)中的數(shù)據(jù)寫道磁盤上,這些更新的數(shù)據(jù)就會丟失。

read把數(shù)據(jù)從內(nèi)核緩沖區(qū)復制到I/O緩沖區(qū),write把數(shù)據(jù)從I/O緩沖區(qū)復制到內(nèi)核緩沖區(qū),它們不等價于數(shù)據(jù)在內(nèi)核緩沖區(qū)和磁盤之間的交換。注意:對于用戶進程來說,把數(shù)據(jù)送到內(nèi)核緩沖和送到外設上是等價的(一樣的效果),即對用戶進程是透明的。

標準輸出(1)和錯誤輸出(2)的區(qū)別。首先,前者是行緩沖,后者是無緩沖,可以立即將錯誤信息輸出到屏幕上,而不會留在I/O緩沖中;兩者都默認輸出到屏幕上。

總結(jié)

以上是生活随笔為你收集整理的全缓冲、行缓冲和无缓冲的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。