`
jyangzi5
  • 浏览: 215723 次
  • 性别: 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;
}

分享到:
评论

相关推荐

    缓冲区溢出实验

    **缓冲区溢出实验** 缓冲区溢出是计算机科学中一个重要的安全问题,尤其是在软件开发领域。这个实验将深入探讨这一主题,理解其原理,并学习如何预防和应对这种漏洞。 ### 1. 缓冲区溢出的概念 缓冲区溢出...

    缓冲区溢出原理及植入代码的分析研究.pdf

    缓冲区溢出是一种常见的软件安全漏洞,主要发生在使用C或C++编程语言编写的程序中。这些语言允许程序员直接操作内存,如果没有适当的边界检查,就会引发溢出问题。当程序试图将超过预定长度的数据写入缓冲区时,超出...

    缓冲区溢出攻击与防止技术

    缓冲区溢出是一种常见的安全漏洞,广泛存在于各种操作系统和应用软件之中。其基本原理是:通过向一个固定大小的缓冲区中输入超出其容量的数据,导致溢出的数据覆盖相邻的内存区域,从而引发程序异常或被攻击者利用来...

    c语言缓冲区溢出攻击原理案例视频讲解

    在IT安全领域,缓冲区溢出(Buffer Overflow)是一种常见的软件漏洞,主要存在于C语言及其类似编程语言中。本教程通过视频形式详细讲解了C语言程序的运行时结构以及缓冲区溢出攻击的原理。 首先,C语言程序的运行时...

    缓冲区溢出教程

    **缓冲区溢出详解** 缓冲区溢出是计算机编程中的一种常见错误,它发生在程序尝试向固定大小的内存区域(即缓冲区)写入超出其实际容量的数据时。这种现象可能导致数据丢失、程序崩溃,甚至可能被恶意利用来执行未经...

    好资料-----缓冲区溢出

    在`PresentPPT`的演示文稿中,可能包含了具体的缓冲区溢出案例分析,包括漏洞的触发条件、利用过程以及防御策略的实施方法,这些内容可以帮助读者更直观地理解缓冲区溢出的复杂性及其重要性。 综上所述,理解缓冲区...

    huanchongquyichu.rar_缓冲区溢出

    **缓冲区溢出详解** 缓冲区溢出是计算机编程中的一种常见安全漏洞,它发生在程序试图向固定大小的内存区域(缓冲区)写入超出其实际容量的数据时。这种漏洞可能导致程序崩溃,甚至可能被恶意攻击者利用来执行任意...

    缓冲区溢出攻击与防范抢鲜试读版.pdf

    ### 缓冲区溢出攻击与防范知识点解析 #### 一、缓冲区溢出概述 **缓冲区溢出(Buffer Overflow)**是一种常见的软件编程错误,它发生在程序试图将数据写入到一个固定大小的缓冲区中时,数据量超过了缓冲区所能容纳的...

    STM32CUBEMX 生成的HAL库,使用非KEIL,编译存在一个printf,不能输出,或者仿真卡死,或者仿真点击三次运行

    4. 缓冲区溢出:如果`printf`输出的数据超过了串口缓冲区的容量,可能会导致程序阻塞。确保有足够的缓冲区空间,并且正确处理溢出情况。 5. 仿真器问题:某些仿真器可能在首次启动时没有正确设置或者需要特定的初始...

    STM8L串口用printf函数进行重定义

    3. **缓冲区管理**:由于STM8L的内存限制,通常会有一个小的发送缓冲区用于暂存printf的输出。当缓冲区满时,程序需要暂停printf直到串口发送完成一部分数据。这可以通过自定义的流(stream)结构体和相关函数实现。...

    avr的gcc编程(初学者必看)

    - **外部RAM**: 可选的扩展内存,用于存储大量数据或大容量缓冲区。 - **寄存器操作**: - **I/O寄存器**: 控制单片机的各种输入输出功能,如GPIO、定时器等。 - **使用方法**: 通过直接读写寄存器地址来设置或...

    AVR-GCC常见库函数

    - `eeprom_read_block`: 用于从指定地址开始读取一定长度的数据到缓冲区。 - `eeprom_is_ready`: 检查EEPROM是否准备好接收数据。 - `eeprom_read_byte`: 从指定地址读取一个字节。 - `eeprom_read_word`: 从指定...

    基于C语言fflush()函数的使用详解

    fflush(stdout),使stdout清空,就会立刻输出所有在缓冲区的内容。 fflush(stdout)这个例子可能不太明显,但对stdin很明显。 如下语句: int a,c; scanf(“%d”,&a); c=getchar(); 输入: 12(回车) 那么 a=12 ,c= ...

    STM32F103C8T6 UART Write & Intrrupt Read & printf

    中断服务函数通常会将接收到的数据存入缓冲区,并根据需要触发其他操作。 3. **printf功能**:在嵌入式系统中,printf通常是通过重定向标准输出到UART来实现的。这需要一个自定义的putchar函数,将字符发送到UART...

    缓冲溢出入门.pdf

    - **启用编译器安全特性**:许多现代编译器提供了额外的安全选项,如GCC的`-fstack-protector`和MSVC的`/GS`选项,可以帮助检测或防止缓冲区溢出。 通过深入学习和实践,我们可以更好地理解和防范缓冲区溢出这类...

    ARM中打印函数print 的几种实现方法

    vsprintf函数可以将格式化的字符串输出到一个字符缓冲区中,然后使用自定义的UART发送函数将这个缓冲区的内容发送到串口。实现这个方法的步骤包括包含头文件stdio.h和stdarg.h,编写一个变参函数,以及实现UART的...

    hw01报告1

    本报告涵盖了两个缓冲区溢出漏洞的利用思路和方法,分别是Buffer Overflow Baby和Buffer Overflow Boy。 Buffer Overflow Baby Buffer Overflow Baby漏洞是由于gets函数不执行越界检查所致。当gets函数从标准输入...

    二进制漏洞挖掘-栈溢出-开启FORTIFY1

    栈溢出漏洞是指在栈缓冲区中写入数据时,未对缓冲区大小进行判断,导致写入数据长度可能大于缓冲区长度。这将导致栈溢出,攻击者可以利用这个漏洞来覆盖返回地址,指向恶意代码的起始地址。 在这里,我们使用的测试...

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

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

    生产者消费者实现 Linux实现

    生产者消费者问题是指,在一个缓冲区中,有多个生产者进程和消费者进程,生产者进程负责将数据写入缓冲区,而消费者进程负责从缓冲区中读取数据。问题的关键在于如何确保生产者进程和消费者进程之间的同步,以避免...

Global site tag (gtag.js) - Google Analytics