作者flashphp (ashin)
看板C_and_CPP
標題[問題] 如何設定字元流之緩衝區大小
時間Mon Nov 2 14:04:05 2009
想請問各位先進的是,在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
1F:→ MOONRAKER:自己開個大字串一直sprintf() 11/02 15:20
2F:→ MOONRAKER:結束以前再把大字串寫進去,不就結了 11/02 15:20
3F:→ flashphp:真要這麼硬幹也是可以,只是想找一個聰明點的方法~ 11/02 15:28
4F:推 twotwoone:差異不大,頂多是程式碼多打一點而已 11/02 15:51
5F:→ flashphp:嗯.. 難道都沒有控制字元流緩衝區的方法了嗎? 大家都是 11/02 16:15
6F:→ VictorTom:寫大字串比較麻煩的就是要check爆了沒, 不過爆了就flush 11/02 16:15
7F:→ VictorTom:下去, 似乎這樣的cache機制本來就是這麼運作的@_@" 11/02 16:16
8F:→ flashphp:這麼硬上的=>寫一個大到爆的陣列再開始狂塞值進去 11/02 16:16
9F:→ flashphp:嗯.. 了解, 可能真的是我想太多了, 謝謝各位的指教! ^^ 11/02 16:17
10F:→ MOONRAKER:土的緩衝區也一樣是緩衝區啦,沒什麼trick的 11/02 18:26