作者jacky1989 ()
看板C_and_CPP
标题[问题] 每秒检查档案
时间Fri Dec 2 21:57:24 2016
开发平台(Platform)(Ex: Win10, Linux, ...)
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC
问题(Question):
我设计一个程式每秒去检查某档案是否存在
每10秒显示目前经过秒数
预期的正确结果(Expected Output):
每秒显示一次资讯
错误结果(Wrong Output):
10秒才一次性显示全部资讯
程式码(Code):(请善用置底文网页, 记得排版)
int main(){
FILE *fid_rd;
int count=0,accu=0;
while(1){
fid_rd=fopen(".running","r");
sleep(1);
if(!fid_rd){
printf("finish\n");
break;
}else{
printf(".");
if(count==9){
count=0;
accu+=10;
printf("Simulator has took %d secs\n",accu);
}else
count++;
fclose(fid_rd);
}
return 0;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 49.214.129.158
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1480687047.A.6FF.html
1F:推 james732: 你需要的可能是fflush (乱猜)12/02 22:24
2F:推 stupid0319: sleep(1)?12/02 22:38
3F:→ stupid0319: sleep(999)还差不多12/02 22:39
4F:→ Schottky: printf("."); 後面加 fflush(stdin);12/02 22:57
5F:→ Schottky: printf("."); 後面加 fflush(stdin);12/02 22:57
6F:→ Schottky: 还有你为什麽要先 sleep 再检查 fopen 是否成功...12/02 22:58
7F:→ shadow0326: 没有newline就要自己flush12/02 23:07
※ 编辑: jacky1989 (49.214.130.241), 12/02/2016 23:13:26
8F:→ pttworld: 睡眠时间太短机器可能跟不上,这开档。int.. 12/02 23:30
9F:→ MOONY135: 1是一毫秒喔 至少要800毫秒以上 12/02 23:38
12F:→ pttworld: 关键字:gcc file exists 12/03 00:22
13F:推 LPH66: 什麽 fflush(stdin)... 不要乱教 12/03 00:43
14F:→ Schottky: 对不起... 打错字... 12/03 00:44
15F:→ LPH66: 这里要 fflush 也是 fflush(stdout), 这个是可以用的 12/03 00:44
想请问为什麽需要fflush呢?
※ 编辑: jacky1989 (123.192.57.91), 12/03/2016 02:50:12
※ 编辑: jacky1989 (123.192.57.91), 12/03/2016 02:52:03
16F:推 LPH66: 基本上是在猜测 printf 出来的东西因为被 buffer 住了 12/03 08:25
17F:→ LPH66: 所以在推出去到萤幕之前就 sleep 了导致东西一次印出来 12/03 08:27
18F:→ LPH66: fflush(stdout); 就是在强迫这些 buffer 住的东西印出来 12/03 08:27
19F:→ x000032001: 因为stdout是line buffered 12/03 15:29