C语言缓冲区
定义
缓冲区是内存空间的一部分,用于缓冲输入或输出的数据。根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。
类型
缓冲区分为三种类型:全缓冲、行缓冲和不带缓冲。
1.全缓冲
在这种情况下,当填满标准I/O缓存后才会进行实际的I/O操作。典型代表是对磁盘文件的读写。
2.行缓冲
输入的字符先放入缓冲区,遇到换行符时才进行实际的I/O操作。典型代表是标准输入(stdin)和标准输出(stdout)。
3.不带缓冲
即不进行缓冲,典型代表是stderr,这样可以使得出错信息尽快显示。
大部分系统默认使用下列类型的缓存:标准出错是不带缓存的;涉及终端设备的流是行缓存的;其余为全缓存。
缓冲区的大小
如果用户没有设置缓冲区,系统会默认为标准输入输出设置缓冲区,大小通常为4096字节。这和计算机中的分页机制有关,每个页的大小为4096字节,因此通常情况下,缓冲区的大小会设置为4096字节。
缓冲区的刷新
以下情况会引发缓冲区的刷新:
1.缓冲区满时;
2.行缓冲区遇到换行符;
3.关闭文件;
4.使用特定函数刷新缓冲区。
举例
#include<stdio.h>
#include<Windows.h>
int main() {
printf("hello");
int i = ;
for (; i < ; i++) {
putchar('a');
Sleep();
}
return ;
}
运行该程序,等待10s后,输出helloaaaaaaaaaa。
这是由于键盘输入是标准的行缓冲,只有遇到换行符或者程序结束后才会输出到屏幕上。
#include<stdio.h>
#include<Windows.h>
int main() {
printf("hello");
fflush(stdout);
int i = ;
for (; i < ; i++) {
putchar('a');
Sleep();
}
return ;
}
运行该程序,首先输出hello,等待10s后,继续输出aaaaaaaaaa。
这是由于fflush刷新了缓冲区,所以会首先输出hello。
参考
https://www.cnblogs.com/pricks/p/3821832.html
https://blog.csdn.net/ww1473345713/article/details/51713471
C语言缓冲区的更多相关文章
- C语言缓冲区清空
C语言中有几个基本输入函数: //获取字符系列 int fgetc(FILE *stream); int getc(FILE *stream); int getchar(void); //获取行系列 ...
- C语言缓冲区(缓存)详解
缓冲区又称为缓存,它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区.缓冲区根据其对应的是输入设备还是输出设备,分为输 ...
- C输入输出函数与缓冲区
#转 对C语言输入输出流和缓冲区的深入理解C语言缓冲区(缓存)详解缓冲区又称为缓存,它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的 ...
- C语言字符串的输入输出
字符串的输出 在C语言中,输出字符串的函数有两个: puts():直接输出字符串,并且只能输出字符串. printf():通过格式控制符 %s 输出字符串.除了字符串,printf() 还能输出其他类 ...
- C++ 知识零碎搭建
全局变量 局部变量 函数不能嵌套定义 C/C++ 变量在将要被使用时定义即可, 不必一开始就声明所有变量 函数的定义与声明的区别 C++常规类型自动类型转换规则 C语言中十六进制和八进制的格式: 二进 ...
- C语言清空输入缓冲区的N种方法对比
转自C语言清空输入缓冲区的N种方法对比 C语言中有几个基本输入函数: //获取字符系列 int fgetc(FILE *stream); int getc(FILE *stream); int get ...
- C语言刷新缓冲区(转载)
C语言中有几个基本输入函数: //获取字符系列 int fgetc(FILE *stream); int getc(FILE *stream); int getchar(void); //获取行系列 ...
- 关于scanf、getchar、getch、getche缓冲区分析——C语言
缓冲区 根据数据刷新的时机可以将缓冲区的类型分为:全缓冲.行缓冲.无缓冲 (注意:Windows下的输出设备没有缓冲区,意思是printf是无缓冲的,但是在Linux下printf就是行缓冲的,至于为 ...
- C语言清空输入缓冲区的N种方法对比【转】
转自:http://www.cnblogs.com/codingmylife/archive/2010/04/18/1714954.html C语言中有几个基本输入函数: //获取字符系列 int f ...
随机推荐
- 学Python的感受
这门课程已经上了两周了,虽然还没学到什么实质上的东西,只是做了几道题,但是我也感受到了Python的魅力.我感觉这门课真的很有用,比如老师所说的网络爬虫,我对这个非常感兴趣.再说说老师的教学方式,理论 ...
- Git使用和Vue项目
1.创建git排除文件,.gitignore 2.READEME.md 和 LICENSE开源协议 git init 创建仓库 , git status 查看文件状态 红色文件表示未提交. git ...
- Hashtable几种常用的遍历方法
Hashtable 在System.Collection是命名空间李Hashtable是程序员经常用到的类,它以快速检索著称,是研发人员开发当中不可缺少的利器. Hashtable表示键/值对的集合, ...
- Excel坐标自动在AutoCad绘图_3
众所周知,Excel对数据处理的功能非常强大,它可以进行数据处理.统计分析已经辅助决策的操作,该软件已经渗透到各个领域.作为一个测绘人,GISer, 也经常利用excel完成一些测量表格的自动化计算, ...
- 日志入库-log4j-mysql连接中断问题
mysql5.6 druid1.0.17 log4j 1.2.16 一定时间后无法连接 CommunicationsException: Communications link failure 粗暴 ...
- Beautiful Soup 解析html表格
from bs4 import BeautifulSoup import urllib.request doc = urllib.request.urlopen('http://www.bkzy.or ...
- STS4 add spring bean configuration file
转自:https://blog.csdn.net/asc_123456/article/details/83216577
- python format()用法
转自 https://www.cnblogs.com/gide/p/6955895.html python2.6开始,新增了一种格式化字符串的函数str.format(),此函数可以快速处理各种字符串 ...
- C#winform窗体利用系统抓取关闭按钮事件
const int WM_SYSCOMMAND = 0x112; const int SC_CLOSE = 0xF060; const int SC_MINIMIZE = ...
- 编译jmeter5.0源码
jmeter5.0使用过程中,遇到request或者response乱码的情况,想要一次性解决这个问题,需要编译ApacheJMeter_http.jar这个包(lib\ext文件下)里的Reques ...