[問題] 如何設定字元流之緩衝區大小

看板C_and_CPP作者 (ashin)時間16年前 (2009/11/02 14:04), 編輯推噓1(109)
留言10則, 4人參與, 最新討論串1/1
想請問各位先進的是,在C++裡有沒有可以設定/控制字元流緩衝區的函式, 舉例來說,一程式如下: #include <stdio.h> #include <windows.h> int main() { FILE *fp=fopen("D:\\aaa.txt", "w+"); for(int i=0;i<10000;i++) { fprintf(fp, "buffer test\n"); Sleep(50); //怕程式執行太快用Sleep拖點時間 } fclose(fp); return 0; } 若在程式執行同時以UltraEdit或TextPad等文字編輯軟體開啟, 會觀察到"buffer test"這字串會被程式一直flush出來. 想請問的就是: 有沒有方法自行控制這個字元流的緩衝區, 先讓這10000筆字串資料都先存在緩衝區(記憶體), 等到關檔前再一次將10000筆資料flush至檔案(磁碟). 因為看到許多程式似乎都具備有這樣的功能, 能想到的好處是,若在程式執行中檔案不小心被刪除/修改, 則會因為資料都存在記憶體裡而不受到影響, 故想討論此做法如何實現, 以上或有錯誤或不合理處還請各位不吝指教. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.248.180.253

11/02 15:20, , 1F
自己開個大字串一直sprintf()
11/02 15:20, 1F

11/02 15:20, , 2F
結束以前再把大字串寫進去,不就結了
11/02 15:20, 2F

11/02 15:28, , 3F
真要這麼硬幹也是可以,只是想找一個聰明點的方法~
11/02 15:28, 3F

11/02 15:51, , 4F
差異不大,頂多是程式碼多打一點而已
11/02 15:51, 4F

11/02 16:15, , 5F
嗯.. 難道都沒有控制字元流緩衝區的方法了嗎? 大家都是
11/02 16:15, 5F

11/02 16:15, , 6F
寫大字串比較麻煩的就是要check爆了沒, 不過爆了就flush
11/02 16:15, 6F

11/02 16:16, , 7F
下去, 似乎這樣的cache機制本來就是這麼運作的@_@"
11/02 16:16, 7F

11/02 16:16, , 8F
這麼硬上的=>寫一個大到爆的陣列再開始狂塞值進去
11/02 16:16, 8F

11/02 16:17, , 9F
嗯.. 了解, 可能真的是我想太多了, 謝謝各位的指教! ^^
11/02 16:17, 9F

11/02 18:26, , 10F
土的緩衝區也一樣是緩衝區啦,沒什麼trick的
11/02 18:26, 10F
文章代碼(AID): #1AxdPOzu (C_and_CPP)