作者decten (呆子)
看板LinuxDev
標題Re: [問題] 想要用printf弄一個類似進度條的東西
時間Thu Dec 20 19:57:23 2007
用同標題再問一個,現在可以成功做出進度條了,但是我發現整個程式
在頓並不是處理檔案IO的地方...而是程式結束的地方。
請問這是什麼原因?ansi c是在程式結束才會真正把檔案存回去嗎?
因為原本我是在程式開始的地方就用fopen了,程式結束前才用fclose。
剛剛發現最後的地方在頓之後,改成遇到需要讀取/寫入檔案的話才
fopen,動作完成馬上fclose。結果似乎沒有差別。網路上不知道要怎麼找
相關的資訊,真的是很苦惱阿~~
※ 引述《decten (呆子)》之銘言:
: 如題,最近寫了幾隻程式要測效能,用printf加上參數大致弄了一個
: 類似進度條的東西,但是程式總是跑完才跑進度條....囧
: 我想要弄成的樣子:
: 0%|=== |100% 跑一段之後便成 0%|======== |100%
: 但是他只會直接跑出:
: 0%|==============|100%
: 請各位指點:
: printf(" 0\%| |100\%\r 0\%|");
: for(i=0; i<loopn; ++i)
: {
: .....file io operation....
: if( ! (i%loopn/10) ) printf("==");
: if( i == loopn-1 ) printf("\n");
: }
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.159.244
1F:→ decten:我要生成的檔案只有幾k,運算的部分都是馬上就做完了 12/20 20:18
2F:→ decten:剩下最後結束程式(檔案真正寫回硬碟)卻傳超久(約5sec) 12/20 20:19
3F:推 SILee:所有的OS都是程式執行完才會幫你把檔案存回去HD吧 12/21 08:34
4F:→ SILee:I/O的latency那麼長 如果邊執行邊寫入HD 程式會變很慢 12/21 08:36
5F:→ SILee:甚至有些OS就算是遇到fclose()也不會馬上幫你存回去 12/21 08:38
6F:→ SILee:而是放在buffer裡等到系統idle下來沒事幹才會真的去存檔 12/21 08:38
7F:→ SILee:不這麼做的話 隨便跑個小程式 可能就要花掉20分鐘在I/O上 12/21 08:40
8F:推 freesamael:試試看 fflush() 和 sync(), fsync() 12/21 23:00
9F:推 yhuiyang:不知道原po的開發環境是?file system, device...,etc. 12/21 23:39
10F:→ decten:一般x86 pc, debian 12/30 14:57
11F:→ decten:後來發現可能是io delay沒錯,不過delay的位置還是有疑問.. 12/30 14:58