`
jyangzi5
  • 浏览: 208473 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

gcc printf之缓冲区

阅读更多

今天同样遇到了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;
}

分享到:
评论

相关推荐

    printf:执行我们自己的printf函数

    C-printf 项目要求 所有文件将在Ubuntu 14.04 LTS上编译 程序和函数将使用gcc 4.8.4使用标志-Wall -Werror -Wextra和-pedantic进行编译 代码必须遵循风格 ... 使用1024个字符的本地缓冲区,以便尽可能少地调用wr

    C语言编程透视

    第一部分(讨论“缓冲区溢出和注入”问题)(更新时间:2008-2-13) 第二部分(讨论进程的内存分布情况)(更新时间:2008-6-1) 《进程和进程的基本操作》 进程操作:描述进程相关概念和基本操作 更新时间:2008-2...

    fmt:格式化库作为 C stdio 和 C++ iostreams 的替代方案-开源

    该库是完全类型安全的,自动内存管理可防止缓冲区溢出,使用异常或在编译时报告格式字符串中的错误。 该库生成紧凑的每次调用编译代码。 该库是高度可移植的,仅依赖于一小组 C++11 特性,如可变参数模板、类型特征...

    fmt:格式化库可替代C stdio和C ++ iostream-开源

    该库是完全类型安全的,自动内存管理可防止缓冲区溢出,使用异常或在编译时报告格式字符串中的错误。 该库生成紧凑的每次调用编译代码。 该库具有高度的可移植性,仅依赖一小部分C ++ 11功能,例如可变参数模板,...

    C语言FAQ 常见问题列表

    printf("You typed \"%s\"\n", answer); o 8.2 我的 strcat() 不行.我试了 char *s1 = "Hello, "; char *s2 = "world!"; char *s3 = strcat(s1, s2); 但是我得到了奇怪的结果。 o 8.3 但是 strcat 的手册页说它...

    《你必须知道的495个C语言问题》

    3.8 为什么表达式printf("%d %d", f1(), f2()); 先调用了f2?我觉得逗号表达式应该确保从左到右的求值顺序。 36  3.9 怎样才能理解复杂表达式并避免写出未定义的表达式?“序列点”是什么? 36 3.10 在a[i] = i...

    你必须知道的495个C语言问题

    第1章 声明和初始化 基本类型 1.1 我该如何决定使用哪种整数类型? 1.2 为什么不精确定义标准类型的大小? 1.3 因为C语言没有精确定义类型的大小,所以我一般都用typedef定义int16和...printf("Typesomething...

    AVR-UART-lib:极轻的uart库,用于AVR 8位微控制器

    中断驱动的USART(RS232)库,用于AVR微控制器,支持多个硬件UART,使用环形缓冲区进行接收/发送。 专为资源有限的实时或高吞吐量应用而设计。 特征 最多支持4个USART的可选支持 多达255个字节的FIFO 除每个已实现...

    你必须知道的495个C语言问题(PDF)

    printf("%dnn", i++ * i++); 返回49?不管按什么顺序计算, 难道不该打印出56吗? . . . . . . 13 3.3 对于代码int i = 3; i = i++; 不同编译器给出不同的结果, 有的为 3, 有的为4, 哪个是正确的? . . . . . . . . ...

Global site tag (gtag.js) - Google Analytics