[英]About printf function and postfix increment operator (i++) in while loop. I want to know about procedure of the printf function
[英]I use sleep function in ubuntu ,but printf function run very slowly in while loop. why?
我将ubuntu 14.04版本系统用于以下代码。 我使用下面的代码:(下面的代码是无限循环)
#include <stdio.h>
#include <unistd.h>
int flag=0;
int main(void){
printf("program start.\n");
printf("PID=%d\n",getpid());
printf("flag=%d\n",flag);
//-----------I feel weired below do...while... sentences----------//
do{
printf("loop_");
sleep(1);
}while(flag==0);
printf("program exit.\n");
return 0;
}
在下面的开始打印结果中:
root@ubuntu:~/Desktop/my_test_code# ./issue
program start.
PID=3113
flag=0
...........//start waiting here,and don't print "loop_"
然后,我等待了很长时间后,该程序打印了很多“ loop_”。 我觉得这很奇怪,应该打印一个字符串“ loop_”,然后,等待一秒钟,然后再次打印一个“ loop_”,依此类推,为什么我等了很长时间,开始打印很多的“ loop_”?
有人对我的问题有任何想法。 先感谢您。
printf
缓冲其输出(直到给定大小或\\n
),因此直到将其刷新后您才能看到输出。
改变你的循环
printf("loop_");
fflush(stdout);
sleep(1);
应该解决您的问题。
根本原因:
通常,stdout的缓冲区将被\\n
刷新,因此此处的循环继续进行,并且stdout没有机会正确缓冲其数据。
解:
这里有三种方式
1)在printf末尾使用\\n
printf("loop_\n");
2)在循环执行printf之后,调用fflush(stdout):
3)在程序中使用以下调用禁用stdout流的缓冲
setvbuf(stdout, NULL, _IONBF, 0);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.