關於C語言裡setvbuf和setbuf的疑問?

時間 2021-06-26 19:19:55

1樓:PJHubs

其實,不單單只是檔案的使用,而是說與緩衝池打交道的場景下都有必要去使用,當然,這是充分不必要條件。尤其你是要把「東西」從外部儲存器中移交給程式使用,當你這段程式多次反覆的呼叫後,系統會將其放入cache(高速緩衝儲存器)中,為啥要放呢?這個場景就跟題主問的問題類似了。

之所以要先把檔案先置於緩衝器中,也可以不置。如果你是要多次讀取和寫入該檔案的話,這樣做會大大提高IO速度,有利於時間片輪轉時間縮短,也就是看上去好像你的程式跑起來變快了。

所以,還是那句話,你完全可以不用這麼做。。。

2樓:躺糖

disk IO大部分是用buffer你理解吧?不理解的話,舉個例子,你正在看電視劇集,你數學老師說你要做第一題,你關上電視,走進書房,從書架裡找到數學書,翻到273頁,找到第一題,做了,把書合上,放回書架,走出書房,開啟電視。這時候你數學老師說你還要做第二題,你關上電視,走進書房,從書架裡找到數學書,翻到底273頁找到第二題,做了,把書合上,放回書架,走出書房,開啟電視。

這時候你數學老師說你還要做第三題。你想糊他熊臉,但是你是個IO handler,你不能這樣做,於是你關上電視,走進...

後來,你數學老師給了你乙個buffer,你只需要把buffer上的題做出來,你就能看一集完整的電視劇集了,中間不插廣告,或者很少插廣告。於是你就認為buffer是好的,你就跟數學老師說:你們以後都用buffer吧。

所以,為了不打擾你寫的程式看電視劇集,IO大部分是用buffer的。

setvbuf和setbuf又是幹嘛的呢?setvbuf的parameters是乙個stream,乙個buffer,乙個mode,乙個size。stream就是你的file handler。

buffer是你的buffer pointer,NULL的話你的程式會根據你的buffer size自己申請一串buffer space。mode有三種,full,line,nobuf。full mode下buffer滿了,或者fflush才會執行一次IO。

line mode下看見new line執行一次IO。no buf就是一開始那個例子,接到乙個指令執行一次IO。setbuf把setvbuf封裝了,只留了stream和buffer兩個parameters。

所以這兩個只是讓你自定義你buffer行為的。不用這個function,你就用預設的buffer,對宇宙沒啥影響,除了你的程式可能沒辦法一次看完一集電視劇集,或者一次看了太多電視劇集看吐了...對於你現在這個階段的程式設計師應該是影響不大的

關於C語言後端崗位?

C語言應該在偏硬體的領域,比如微控制器或者嵌入式中還有比較多的應用,純後端伺服器開發用C的應該很少了。有不少網路基礎設施的庫是C寫的,但是你如果只是寫應用用C寫太累了,然後C 加Python確實是利器,但是另一方面,需要用這個利器解決問題的場合確實不多。作為乙個學生,千萬不要讓用什麼語言限制了自己的...

在c語言中, c與 s有什麼區別呢?

C語言格式化描述字串中的 在scanf和printf中有不同的含義。在scanf中的含義是忽略掉這個匹配的輸入,例如 scanf d d a 讀取輸入 1 2 那麼a的值是2,第乙個 d對應的1就被丟棄掉了。在printf中,d將和引數列表中的兩個引數對應,第乙個引數為輸出長度。例如printf d...

資料結構與演算法 C語言描述第2版裡關於樹的平均內部路徑長計算過程是怎樣的?

Whoum Whour 巧了。我也剛好看到這裡,也沒看懂。主要是關於 所有子樹的大小都等可能出現 這句,以及 二叉查詢樹成立但二叉樹不成立這句 1.關於 所有子樹的大小都等可能出現 這句 這話我有兩種理解方式 第一種,等可能出現 N 2 兩個節點 的尋找二叉樹有兩款 也就是說N 2的出現可能是2 N...