Re: [問題] 想要用printf弄一個類似進度條的東西

看板LinuxDev作者 (呆子)時間17年前 (2007/12/20 19:57), 編輯推噓3(308)
留言11則, 4人參與, 最新討論串2/2 (看更多)
用同標題再問一個,現在可以成功做出進度條了,但是我發現整個程式 在頓並不是處理檔案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

12/20 20:18, , 1F
我要生成的檔案只有幾k,運算的部分都是馬上就做完了
12/20 20:18, 1F

12/20 20:19, , 2F
剩下最後結束程式(檔案真正寫回硬碟)卻傳超久(約5sec)
12/20 20:19, 2F

12/21 08:34, , 3F
所有的OS都是程式執行完才會幫你把檔案存回去HD吧
12/21 08:34, 3F

12/21 08:36, , 4F
I/O的latency那麼長 如果邊執行邊寫入HD 程式會變很慢
12/21 08:36, 4F

12/21 08:38, , 5F
甚至有些OS就算是遇到fclose()也不會馬上幫你存回去
12/21 08:38, 5F

12/21 08:38, , 6F
而是放在buffer裡等到系統idle下來沒事幹才會真的去存檔
12/21 08:38, 6F

12/21 08:40, , 7F
不這麼做的話 隨便跑個小程式 可能就要花掉20分鐘在I/O上
12/21 08:40, 7F

12/21 23:00, , 8F
試試看 fflush() 和 sync(), fsync()
12/21 23:00, 8F

12/21 23:39, , 9F
不知道原po的開發環境是?file system, device...,etc.
12/21 23:39, 9F

12/30 14:57, , 10F
一般x86 pc, debian
12/30 14:57, 10F

12/30 14:58, , 11F
後來發現可能是io delay沒錯,不過delay的位置還是有疑問..
12/30 14:58, 11F
文章代碼(AID): #17QbYarr (LinuxDev)
文章代碼(AID): #17QbYarr (LinuxDev)