作者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