kid*_*kid 5 c printf loops while-loop
我试图运行以下代码:
#include <sys/time.h>
#include <stdio.h>
int main()
{
unsigned int ms, oldms = 0,dif;
struct timeval tv;
while(1)
{
gettimeofday(&tv, NULL);
ms=tv.tv_sec;
//printf("%d\n",ms-oldms );
dif=ms-oldms;
if(dif>3)
{
printf("3 seconds up");
oldms=ms;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望它每隔3秒打印一次"3秒钟",但它不会显示该消息.我尝试使用gdb调试它,但似乎没有任何错误,仍然没有输出.在尝试调试时,我添加了一个printf语句,并且可以看到输出.
如果我在删除// printf("%d \n",ms-oldms)之后运行程序; 声明,再没有输出.我不确定发生了什么,是否依赖于任何事情.
$ gcc --version gcc(Ubuntu 4.8.2-19ubuntu1)4.8.2
P.P*_*.P. 10
输出缓冲是原因.
stdout当连接到终端设备时,默认情况下是行缓冲.您可以使用刷新了这一点,fflush(stdout);或使用\n中printf()即printf("3 seconds up\n");.或者禁用它setbuf(stdout, 0);
I/O一般很慢.所以实现使用固定大小的缓冲区和printf一旦它满了.在实践中,fflush(stdout);过于频繁地调用会影响性能.