0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何修改緩沖類型,緩沖常見問題介紹

西西 ? 來源:編程珠璣 ? 作者:守望先生 ? 2020-01-01 10:33 ? 次閱讀

今天我們看看如何修改這些默認的緩沖類型,以及在實際中可能遇到哪些問題。

更改緩沖類型

在上一篇中說到了一些默認的緩沖類型,例如:

指向終端設備的流是行緩沖的

標準錯誤是不帶緩沖的

指向文件的流是全緩沖的

……

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

如何修改緩沖類型,緩沖常見問題介紹

參數(shù)說明如下:

stream FILE *類型,文件指針

buf 緩沖區(qū)指針

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

size 緩沖區(qū)大小

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

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

如何修改緩沖類型,緩沖常見問題介紹

通過設置stdout(標準輸出)的第二個參數(shù)為NULL,將其變成了不帶緩沖,因此你運行后發(fā)現(xiàn),printf的打印會立即顯示在終端。當然你也可以通過setvbuf,如:

如何修改緩沖類型,緩沖常見問題介紹

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

fputs沒有及時輸出

其實在有了前面的基礎之后,很多問題就迎刃而解了。

看看下面的例子:

如何修改緩沖類型,緩沖常見問題介紹

比如你就想輸出一個字符,就打印到終端,但是按照上面的方法,字符并不會被及時輸出到終端,因此它默認是行緩沖的。打開注釋行,設置為不帶緩沖就可以了。

printf打印的日志沒有輸出

不知道你有沒有遇到過這樣的情況,準備調試某一個bug,發(fā)現(xiàn)每次運行到某個地方,打印就結束了,然后就掛了,讓你誤以為程序執(zhí)行到打印的地方就結束了,然而有可能程序執(zhí)行到后面,只是由于打印是行緩沖的,導致部分打印沒有出來,很可能就是你沒有加上換行符打印而已。這時候你可以設置為不帶緩沖,或者關鍵位置fflush,或者打印記得加上換行符。

fflush之后文件還是丟失了

看完前面的內容之后,是不是覺得豁然開朗了?別高興的太早。以上措施并不是萬事大吉。你可能會踩到什么坑?

文件內容寫完后,fflush了,內容也有了,然后完成后,系統(tǒng)馬上復位,復位起來后,文件內容還是丟失了

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

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

fsync/sync函數(shù)

sync命令

以上函數(shù)或者命令強制將文件系統(tǒng)的buffer寫入磁盤,但是根據(jù)內容大小不一而需要不一樣的時間。

總結

理解緩沖區(qū)的概念會讓你在編程中受益無窮。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 緩沖
    +關注

    關注

    0

    文章

    52

    瀏覽量

    17836
收藏 人收藏

    評論

    相關推薦

    [7.6.1]--限幅箝位緩沖電路的工作原理

    電路分析緩沖電路
    李開鴻
    發(fā)布于 :2022年11月10日 23:26:47

    [2.13.1]--2.12緩沖電路

    電路分析緩沖電路
    jf_60701476
    發(fā)布于 :2022年11月27日 00:18:52

    單片機應用簡單技巧 - 環(huán)形緩沖

    } } } 這樣,就可以使用中斷方式進行串口打印輸出了。該方法可以很簡單移植到其他單片機上。當然,接收部分用中斷方式更加常見,建議也使用環(huán)形緩沖或者乒乓緩沖的方式接收數(shù)據(jù),后面專門介紹
    發(fā)表于 09-18 11:01

    Sigma-Delta ADC常見問題解答

    -Delta ADC常見問題解答 ,歡迎小伙伴們下載~~附件Sigma-Delta ADC 常見問題解答_V2.0.pdf923.4 KB
    發(fā)表于 12-10 11:20

    緩沖電路的作用是什么?有什么類型?

    緩沖電路的作用與基本類型緩沖電路的基本結構
    發(fā)表于 04-06 07:03

    緩沖器,緩沖器是什么?

    緩沖器,緩沖器是什么? buffer   中文譯名: 緩沖,緩沖器,緩沖液  解釋:1、 電信設備。在數(shù)據(jù)傳輸中,用來彌補不同數(shù)據(jù)處
    發(fā)表于 03-08 13:30 ?2495次閱讀

    三態(tài)緩沖介紹

    三態(tài)緩沖器三態(tài)緩沖器三態(tài)緩沖器三態(tài)緩沖器三態(tài)緩沖器三態(tài)緩沖器三態(tài)
    發(fā)表于 11-16 11:59 ?0次下載

    緩沖電路的基本結構_緩沖電路工作原理

    本文開始介紹緩沖電路的概念,其次闡述了緩沖電路的基本結構與緩沖電路的工作原理,最后介紹緩沖
    發(fā)表于 03-26 13:40 ?7.4w次閱讀
    <b class='flag-5'>緩沖</b>電路的基本結構_<b class='flag-5'>緩沖</b>電路工作原理

    起重緩沖器的作用

    起重機是一種重型機械,作業(yè)時產生的慣性也較大,容易產生意想不到的動作,所以,起重機緩沖器在這時候就起到作用了,起重機緩沖器是吸收起重機的運行動能,以減緩沖擊的,起重機緩沖器作用及
    的頭像 發(fā)表于 12-04 15:45 ?1.2w次閱讀

    詳解高速ADC模擬輸入架構類型緩沖型和無緩沖型資料下載

    電子發(fā)燒友網(wǎng)為你提供詳解高速ADC模擬輸入架構類型緩沖型和無緩沖型資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-28 08:48 ?32次下載
    詳解高速ADC模擬輸入架構<b class='flag-5'>類型</b>:<b class='flag-5'>緩沖</b>型和無<b class='flag-5'>緩沖</b>型資料下載

    開關電源之“吸收和緩沖

    本文主要介紹開關電源中的吸收緩沖電路。電源的基本拓撲電路上一般沒有吸收緩沖電路,實際電路上一般有吸收緩沖電路,吸收與緩沖是工程需要,不是拓撲
    發(fā)表于 02-09 10:37 ?22次下載
    開關電源之“吸收和<b class='flag-5'>緩沖</b>”

    電源瞬態(tài)緩沖器的作用是什么

    器的作用、原理、類型、應用場景以及如何選擇合適的緩沖器。 一、電源瞬態(tài)緩沖器的作用 1. 防止電壓尖峰和浪涌 瞬態(tài)電壓尖峰和浪涌是電源系統(tǒng)中常見的問題,它們可能由多種原因引起,如雷電、
    的頭像 發(fā)表于 06-10 16:03 ?532次閱讀

    緩沖器電路設計的分類與比較

    緩沖器電路能夠有效地管理信號傳輸過程中的噪聲、尖峰和振鈴現(xiàn)象。根據(jù)功率損耗的不同,緩沖器電路可以分為有損緩沖電路和無損緩沖電路兩大類。本文將探討這些不同
    的頭像 發(fā)表于 10-04 16:07 ?528次閱讀

    RC緩沖器的工作過程介紹

    RC緩沖器的基本功能是修改振鈴頻率和降低電壓尖峰電平。這一點對于保護電子元件,特別是那些對電壓敏感的元件如MOSFET,至關重要。通過限制電壓尖峰,RC緩沖器有助于維持電路的穩(wěn)定性和可靠性。 RC
    的頭像 發(fā)表于 10-04 16:25 ?382次閱讀
    RC<b class='flag-5'>緩沖</b>器的工作過程<b class='flag-5'>介紹</b>