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

以下程序只是为了在终端上不断连续输出->而已,但是在没有加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,终端,编译器)