gcc printf之缓冲区_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > gcc printf之缓冲区

gcc printf之缓冲区

 2011/1/3 9:17:56  jyangzi5  http://jyangzi5.javaeye.com  我要评论(0)
  • 摘要:今天同样遇到了printf()不输出的情况,看来水很深,在网上找了找,将下面这些东西推荐给大家,源连接:http://blog.163.com/coder_jack@126/blog/static/341526842010497315061/以下程序只是为了在终端上不断连续输出->而已,但是在没有加fflush之前发现根本无法向屏幕打印任何内容。为什么以前从来没有发现printf的这种特性呢?后来想到,以前在用printf时多收情况下都会在字符串尾部加一个\n。或者没有加\n
  • 标签:

今天同样遇到了printf()不输出的情况,看来水很深,在网上找了找,将下面这些东西推荐给大家,

?

源连接:http://blog.163.com/coder_jack@126/blog/static/341526842010497315061/

?

以下程序只是为了在终端上不断连续输出->而已,但是在没有加fflush之前发现根本无法向屏幕打印任何内容。为什么以前从来没有发现printf的这种特性呢?后来想到,以前在用printf时多收情况下都会在字符串尾部加一个\n。或者没有加\n,但是你的程序不是一个dead loop,便也不会牵扯到问题,因为就算执行printf后只是将内容送到缓冲区,但是你到程序结束里,程序结束便会导致缓冲区刷新,你便看到你到屏幕上有你期望到东西出现了。所以我最后得到一个这样到结论:printf会把东西送到缓冲区,而如果缓冲区不刷新到话,你便不会在屏幕上看到东西,而能导致缓冲区刷新到情况有这些:1 强制刷新 fflush;2,放到缓冲区到内容中包含\n \r ;3,缓冲区已满;4,需要从缓冲区拿东西到时候,如执行scanf;
但是这些问题在vc中都没有出现,所以这时编译器相关的!

#include <stdio.h>
#include <unistd.h>?? ?//for sleep()

int main(void)
{
?? ?printf("\nstart the dead loop\n");
?? ?while(1)
?? ?{?? ?
?? ??? ?printf("\b->");
?? ??? ?fflush(stdout);//刷新输出缓冲区,如果不做这个动作,上边的输出便不会显示到屏幕上,除非其中有换行操作或者缓冲区,这也许就是所谓到终端行规程吧。
?? ??? ?usleep(100000);
?? ?}
?? ?return 1;
}

  • 相关文章
发表评论
用户名: 匿名