之前還不是很清楚c語(yǔ)言的緩沖區(qū)問題,但是在深入了c后,發(fā)現(xiàn)緩沖區(qū)是個(gè)分成重要的環(huán)節(jié),無(wú)論是在做開發(fā)還是做漏洞挖掘都是非常重要的,下面我來(lái)介紹一下。

在c語(yǔ)言經(jīng)過編譯鏈接生成可執(zhí)行程序后,然后加載到內(nèi)存時(shí)會(huì)自動(dòng)創(chuàng)建3個(gè)FILE結(jié)構(gòu)的指針,分別是stdin(標(biāo)準(zhǔn)輸入流),stdout(標(biāo)準(zhǔn)輸出流),stderr(標(biāo)準(zhǔn)錯(cuò)誤輸出流)
對(duì)應(yīng)緩沖區(qū)模式分別有3中:_IOFBF :全緩沖 對(duì)于輸入時(shí),需要把輸入緩沖區(qū)填充滿再一次性傳入到內(nèi)存中,但可通過輸入函數(shù)的本來(lái)來(lái)提前結(jié)束,例如 gets函數(shù),只要輸入時(shí)遇到\n也會(huì)提前傳入到內(nèi)存中
對(duì)于輸出時(shí),需填充滿輸出緩沖區(qū)再一次性輸出到屏幕或文件中
_IOLBF :行緩沖 對(duì)于輸入,遇到\n就把輸入緩沖區(qū)一次性輸入到對(duì)應(yīng)內(nèi)存,但最好和輸入函數(shù)一起綜合考慮,例如 一個(gè)程序中有兩個(gè)函數(shù)是連續(xù)的,scanf();gets() scanf函數(shù)是當(dāng)前位置字符不是\n,tab,空格且下一個(gè)位置字符\n,tab,空格就結(jié)束,且這幾個(gè)字符不加入到對(duì)應(yīng)內(nèi)存中,此時(shí)輸入緩沖區(qū)指向的是\n,而gets是遇到\n就結(jié)束且把\n轉(zhuǎn)為0,而正好緩沖區(qū)指向的是\n,就把這個(gè)\n讀入,這樣就對(duì)gets無(wú)法輸入,所以行緩沖對(duì)于輸入時(shí)要輸入函數(shù)+緩沖綜合分析.
對(duì)于輸出,在遇到\n時(shí)一次性輸出到屏幕或文件中,為什么有時(shí)你的printf函數(shù)輸出的東西看不到,就是因?yàn)椴捎玫氖切芯彌_,且你printf里沒有\(zhòng)n,而puts為什么每次都能看見是因?yàn)樵谀┪沧詭?/p>
_IONBF : 不緩沖? 不開辟緩沖區(qū),對(duì)于輸入輸出時(shí),輸入輸出什么就立刻存入輸入到對(duì)應(yīng)內(nèi)存或屏幕文件中
在進(jìn)行輸入輸出時(shí),程序會(huì)創(chuàng)建緩沖區(qū),默認(rèn)是創(chuàng)建在堆中,可通過setvbuf函數(shù)修改緩沖區(qū)模式
為什么會(huì)創(chuàng)建緩沖區(qū)呢?
因?yàn)樵谳斎胼敵鰰r(shí),是由cpu來(lái)操控的,因?yàn)閏pu是高速的,而輸入輸出是低速的,為了提高效率
把數(shù)據(jù)全部放入到緩沖區(qū)后,再由cpu一次性處理,就能大大提升cpu的工作效率
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
文章名稱:c語(yǔ)言緩沖區(qū)問題-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://chinadenli.net/article24/piije.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、網(wǎng)站排名、移動(dòng)網(wǎng)站建設(shè)、企業(yè)建站、關(guān)鍵詞優(yōu)化、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容