c语言读取字符到缓冲区,C语言缓冲区问题——getchar描述

本文介绍了缓冲区的概念及其在解决CPU与硬件设备速度不匹配问题中的作用,详细阐述了全缓冲、行缓冲和无缓冲的区别,并通过实例解析了C语言中的标准I/O缓冲。特别讨论了getchar()函数,说明它如何处理行缓冲,以及在等待用户输入时可能遇到的问题和解决方案。
摘要由CSDN通过智能技术生成

缓冲区的概念

在计算机运行过程中,CPU负责对数据的加工和处理,而硬件设备则负责对数据的传输、表示或存储,如打印、输入\输出等。在这一过程中,不同设备的处理速度有较大差别,从而造成一定程度的效率问题。如在打印机输出过程中,若CPU直接将计算结果交由打印机输出,由于打印输出速度较慢,CPU将需要等待上一个结果输出完成后才能继续输出下一个结果。同样,在输入过程中,CPU需要一直等待直到设备I\O将读取的数据交由其处理。在这个过程中,由于CPU速度较I\O设备快,CPU在大部分时间处于等待状态,从而使得CPU利用率很低,造成系统昂贵资源的浪费。

为了解决CPU与外围硬件设备速度不匹配的问题,提高CPU的利用率,提高系统的并行效率,在系统中引入了缓冲区(buffer)的概念。

缓冲区是在物理内存中独立分配的用于数据移动过程中临时存储数据的内存区域。(Wiki Data Buffer)

在使用Buffer之后,数据的传输过程中,可以将数据先放置在缓冲区中,再交由其他设备处理。以上面操作过程为例,CPU可以先将计算结果存放在缓冲区中,再由打印机从其中读取数据,在打印机输出的过程中,CPU可以处理其他数据而无需等待。在输入过程中,CPU不等待输入完成,I\O设备将用户输入存放在缓冲区中,再去请求CPU资源,CPU则可直接从缓冲区中读取数据进行处理,从而大大提高了CPU的利用率和运行效率。

标准I\O的缓冲

标准I\O根据不同的应用需求,提供了全缓冲、行缓冲、无缓冲三种缓冲方式。

全缓冲:只有当划定的缓冲区被填满或者数据读取至末尾时,才开始执行I\O

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值