您的位置:首页 > 其它

gcc的 printf 和 缓冲区的问题(关于fflush 函数)

2010-06-28 21:58 1131 查看
以下程序只是为了在终端上不断连续输出->而已,但是在没有加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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  gcc 终端 编译器