分析web緩沖問(wèn)題

這篇文章主要介紹“分析web緩沖問(wèn)題”,在日常操作中,相信很多人在分析web緩沖問(wèn)題問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”分析web緩沖問(wèn)題”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、碭山ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的碭山網(wǎng)站制作公司

更改緩沖類型

在上一篇中說(shuō)到了一些默認(rèn)的緩沖類型,例如:

  • 指向終端設(shè)備的流是行緩沖的

  • 標(biāo)準(zhǔn)錯(cuò)誤是不帶緩沖的

  • 指向文件的流是全緩沖的

  • ……

那么這些默認(rèn)的緩沖類型如何修改?有幾個(gè)函數(shù)可以用來(lái)更改緩沖類型:

#include<stdio.h> void setbuf(FILE *stream, char *buf); void setbuffer(FILE *stream, char *buf, size_t size); void setlinebuf(FILE *stream); int setvbuf(FILE *stream,char *buf, int mode, size_t size);

參數(shù)說(shuō)明如下:

  • stream FILE *類型,文件指針

  • buf 緩沖區(qū)指針

  • mode 緩沖模式,包括_IOFBF(全緩沖),_IOLBF(行緩沖),_IONBF(不帶緩沖)

  • size 緩沖區(qū)大小

這里有四個(gè)相關(guān)函數(shù),作用類似,只是修改范圍不一。

setbuf函數(shù)中,如果buf設(shè)置為NULL,則緩沖關(guān)閉;否則指向長(zhǎng)度為BUFSIZ長(zhǎng)度的緩沖區(qū),并且是行緩沖。

#include<stdio.h> #include<unistd.h> int main(void) {     setbuf(stdout,NULL);     printf("bianchengzhuji");     sleep(10);     return 0; }

這里設(shè)置為不帶緩沖,則會(huì)忽略buf和size參數(shù)。設(shè)置為全緩沖或者行緩沖的時(shí)候。并且buf為NULL,會(huì)使用合適長(zhǎng)度的系統(tǒng)buffer,否則使用用戶自定義buffer。緩沖區(qū)的設(shè)置就介紹到這里。

fputs沒(méi)有及時(shí)輸出

其實(shí)在有了前面的基礎(chǔ)之后,很多問(wèn)題就迎刃而解了。

看看下面的例子:

#include<stdio.h> #include<unistd.h> int main(void) {     //setbuf(stdout,NULL);     fputc('a',stdout);     sleep(10);     return 0; }

比如你就想輸出一個(gè)字符,就打印到終端,但是按照上面的方法,字符并不會(huì)被及時(shí)輸出到終端,因此它默認(rèn)是行緩沖的。打開(kāi)注釋行,設(shè)置為不帶緩沖就可以了。

printf打印的日志沒(méi)有輸出

不知道你有沒(méi)有遇到過(guò)這樣的情況,準(zhǔn)備調(diào)試某一個(gè)bug,發(fā)現(xiàn)每次運(yùn)行到某個(gè)地方,打印就結(jié)束了,然后就掛了,讓你誤以為程序執(zhí)行到打印的地方就結(jié)束了,然而有可能程序執(zhí)行到后面,只是由于打印是行緩沖的,導(dǎo)致部分打印沒(méi)有出來(lái),很可能就是你沒(méi)有加上換行符打印而已。

這時(shí)候你可以設(shè)置為不帶緩沖,或者關(guān)鍵位置fflush,或者打印記得加上換行符。

fflush之后文件還是丟失了

看完前面的內(nèi)容之后,是不是覺(jué)得豁然開(kāi)朗了?別高興的太早。

以上措施并不是萬(wàn)事大吉。

你可能會(huì)踩到什么坑?

  • 文件內(nèi)容寫完后,fflush了,內(nèi)容也有了,然后完成后,系統(tǒng)馬上復(fù)位,復(fù)位起來(lái)后,文件內(nèi)容還是丟失了

  • 解壓一個(gè)壓縮包,解壓成功,系統(tǒng)復(fù)位后,還是發(fā)現(xiàn)文件大小為0,文件丟失了

如果你目前還沒(méi)有遇到過(guò)這樣的問(wèn)題,那么你就需要格外注意了。雖然前面fflush等措施將緩沖區(qū)的內(nèi)容進(jìn)行了I/O操作,但是操作系統(tǒng)還需要將文件系統(tǒng)的buffer寫入磁盤,因此馬上直接復(fù)位會(huì)導(dǎo)致文件丟失!怎么辦呢?可以使用:

  • fsync/sync函數(shù)

  • sync命令

到此,關(guān)于“分析web緩沖問(wèn)題”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

分享名稱:分析web緩沖問(wèn)題
文章位置:http://www.muchs.cn/article30/ghgcpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、、小程序開(kāi)發(fā)電子商務(wù)、關(guān)鍵詞優(yōu)化、響應(yīng)式網(wǎng)站

廣告

聲明:本網(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)

搜索引擎優(yōu)化