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