(已解決) 關於C在迴圈裡面寫檔的問題 [論壇 - Ubuntu 程式設計]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊



(已解決) 關於C在迴圈裡面寫檔的問題
會員二級
註冊日期:
2012/6/27 20:43
所屬群組:
已註冊使用者
等級: 8
HP : 0 / 176
MP : 27 / 3810
EXP: 6
離線
各位大大好~

小弟最近在寫一隻C程式

而這隻程式最主要的架構是用一個for迴圈包起來執行

因為執行的時間不短

所以我想要透過寫檔的方式 知道目前進度到哪了

我撰寫的方式如下:

// 有一個專門負責寫進度的function

void progressWriter( int progress )
{
fout = fopen( "/datas/Progress.txt", "w" );
fprintf( fout, "%d", progress );
fclose( fout );
} // progressWriter()

int main()
{
int progress, totalProgress;
total = 320; // 這個值是我為了給範例亂給的 實際的值 是會去別邊抓
for ( progress = 1 ; progress <= total ; progress++ )
{
// 做很多費時的事情
.
.
.
// 做完一個階段 寫一次進度
totalProgress = (progress/total)*100;
progressWriter( totalProgress );
} // for

return 0;
} // main()

問題來了

小弟在執行此程式時

使用cat /datas/Progress.txt指令不斷的去看目前進度到哪了

但我發現的結果是 從0直接跑到100

照理來說 迴圈每執行一次 我所觀測到的進度應該要不一樣才是

怎麼會在0卡很久 突然變成100呢?

還麻煩各位有經驗的大大幫小弟解惑~ 感激不盡 <(_ _)>

2013/4/20 16:26
應用擴展 工具箱
回覆: 關於C在迴圈裡面寫檔的問題
會員三級
註冊日期:
2006/12/24 18:19
所屬群組:
已註冊使用者
等級: 13
HP : 0 / 309
MP : 68 / 11664
EXP: 38
離線
setbuf(fp, NULL)

把 buffer 關掉

2013/4/20 16:29
應用擴展 工具箱
回覆: 關於C在迴圈裡面寫檔的問題
會員二級
註冊日期:
2012/6/27 20:43
所屬群組:
已註冊使用者
等級: 8
HP : 0 / 176
MP : 27 / 3810
EXP: 6
離線
請問大大的fp是指小弟的fout嗎?

FILE *fout;

那麼那一段應該加在function裡面還是main裡面呢?

2013/4/20 16:44
應用擴展 工具箱
回覆: 關於C在迴圈裡面寫檔的問題
管理員
註冊日期:
2011/3/11 6:32
所屬群組:
討論區管理群
等級: 44
HP : 216 / 1084
MP : 1088 / 27507
EXP: 38
離線
迷途小書僮 寫到:
請問大大的fp是指小弟的fout嗎?

FILE *fout;



迷途小書僮 寫到:
那麼那一段應該加在function裡面還是main裡面呢?

應該是 fopen() 完

2013/4/20 17:05
本篇發表文章以「創用CC BY 3.0 或更新之台灣地區版本」授權條款釋出,如何使用敬請參考
 Creative Commons — 姓名標示 3.0 台灣 — CC BY 3.0 TW
 http://creativecommons.org/licenses/by/3.0/tw/

「你不懂的東西就不要亂講,被懂得人看破手腳就算了,騙不懂的人誤導別人,還要別人把你當成大師,這就真的是說不過去了。」
 by Allen Own
 出處 http://www.plurk.com/p/i4uogm

自由知識創作平台介紹
 https://docs.google.com/document/d/1MGG6lW_0qCgH4U785R-IwSc_INdoBGej1l-JxiA4gPE
如何建立新的自由知識創作平台文件
 https://docs.google.com/document/d/11NdzOW2lGYksfyQIcPMPye5tlmj1J0QTkgPTmQvIvKA
應用擴展 工具箱
回覆: 關於C在迴圈裡面寫檔的問題
會員五級
註冊日期:
2008/10/7 21:19
所屬群組:
已註冊使用者
等級: 36
HP : 0 / 896
MP : 661 / 29079
EXP: 85
離線
用fflush應該也可以達到目的:
http://pydoing.blogspot.tw/2010/07/c-fflush.html

只是每次寫入後需要flush一下就是

2013/4/21 1:39
I′m UGP
應用擴展 工具箱
回覆: 關於C在迴圈裡面寫檔的問題
會員三級
註冊日期:
2005/7/22 4:43
所屬群組:
已註冊使用者
等級: 13
HP : 0 / 321
MP : 73 / 13438
EXP: 85
離線
你可以man 2 open

基本上應該用O_SYNC,或者你要每寫一次就flush一次也可以。

EX:

int fd = open("/tmp/kk", O_RDWR|O_SYNC);

2013/4/21 23:51
應用擴展 工具箱
回覆: 關於C在迴圈裡面寫檔的問題
會員二級
註冊日期:
2012/6/27 20:43
所屬群組:
已註冊使用者
等級: 8
HP : 0 / 176
MP : 27 / 3810
EXP: 6
離線
各位大大抱歉~

小弟後來發現 問題不是出在檔案沒有寫入(似乎關檔的同時,檔案就會自動寫入了)

是出在"型別運算"

小弟是這樣宣告的....

int progress, totalProgress;
↑ 整數!!

然而....

totalProgress = (progress/total)*100;

所以(progress/total)是0....OTZ...

所以才會造成從0突然變成100的主因

因為小弟的失誤 還勞煩到各位大大 小弟深感抱歉 <(_ _)>

2013/4/22 15:27
應用擴展 工具箱


 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.