C标准I/O缓冲区:全缓冲和行缓冲
ISO C标准I/O提供了全缓冲和行缓冲
全缓冲:在进行I/O操作时,只有当I/O缓冲区被填满时,才进行真正的I/O操作。所以对于全缓冲的缓冲区可由标准I/O例程自动刷新,即当缓冲区填满时,还有一种方法就是调用函数fflush进行刷新。
行缓冲:在I/O操作时,输入输出遇到换行符时进行,进行真正的I/O操作。对于行缓冲,标准I/O每一行缓冲区的长度是固定的,所以只要填满了缓冲区,即使没有遇到换行符,也换刷新缓冲区。
当然标准I/O还提供了不带缓冲的类型,就是不对字符进行缓冲操作。
那么全缓冲和行缓冲都用在I/O操作的哪些地方呢。
ISO C要求:
- 当且仅当标准输入和输出不涉及交互式设备(终端设备)时,它们才是全缓冲。
- 标准出错不是全缓冲。
但是这并没有告诉我们当涉及到交互式设备时,标准输入输出是行缓冲还是不带缓冲,以及标准出错时行缓冲还是不带缓冲。很多系统(FreeBSD,Linux,Mac OS,Solaris)默认使用下面类型缓冲:
- 如果标准输入输出涉及终端设备,则它们是行缓冲,否则是全缓冲。
- 标准出错不带缓冲。
我们都知道shell为每个进程都定义了三个文件描述符:0,1,2。这三个文件描述符分别与进程的标准输入,标准输出和标准出错输出相关联。在unistd.h头文件中这三个常量分别替换成STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO符号。在ISO C中分别对应与stdin,stdout,stderr。
转载于:https://www.cnblogs.com/sir-jarvis/p/4075850.html
C标准I/O缓冲区:全缓冲和行缓冲相关推荐
- Linux系统编程21:基础IO之全缓冲和行缓冲的区别及深刻理解缓冲区及其作用
文章目录 (1)全缓冲和行缓冲 (2)真正理解缓冲区 (1)全缓冲和行缓冲 一般来说,C库函数写入显示器属于行缓冲,也就是只要遇到一些标记,比如说'\n'就会立即刷新出去 所以上面的例子中如果不关闭1 ...
- C/C++ 的全缓冲、行缓冲和无缓冲
1.简介 C/C++中,基于 I/O 流的操作最终会调用系统接口 read() 和 write() 完成 I/O 操作.为了使程序的运行效率最高,流对象通常会提供缓冲区,以减少调用系统I/O接口的调用 ...
- (转)标准I/O缓冲:全缓冲、行缓冲、无缓冲 .
某日一朋友写了一个HELLO WORLD代码,出不来结果,代码如下: #include <stdio.h> int main(int argc, char **argv){ pri ...
- 全缓冲、行缓冲和无缓冲
这里的缓冲是指的是用户空间的I/O缓冲区,不是内核缓冲. 无缓冲:用户层不提供缓冲,数据流直接到内核缓冲,再到磁盘等外设上.标准错误输出(2)通常是无缓存的,因为它必须尽快输出,且是输出到具有交互式的 ...
- 行缓冲、全缓冲、无缓冲以及用户缓冲区、内核缓冲区介绍
文章目录 1- 缓冲区介绍 (1)缓冲区以及作用 (2)缓冲区的类型 [1]行缓冲(验证) [2]全缓冲(验证) [3]无缓冲 2- 内核缓冲区与用户缓冲区 (1)用户进程和操作系统的关系 (2)用户 ...
- Linux缓冲区(无缓冲,行缓冲,全缓冲)的区别
Linux缓冲区(无缓冲,行缓冲,全缓冲)的区别 1.缓冲区的概念 1.1 全缓冲区 1.2.行缓冲 1.3 无缓冲 1.4.控制缓冲区的方式 2.demo 3.结果分析 1.缓冲区的概念 缓冲区(B ...
- 数据缓冲策略 —— 无缓冲、行缓冲、全缓冲(缓冲区大小测试)
printf打印数据时,一般会先把数据放入C缓冲区,然后再刷新到内核缓冲区,最后再写入硬件 这个过程中,数据从C缓冲区迁移到内核缓冲区的操作我们称为缓冲(也可以理解为刷新) 下面我们将介绍 缓冲策略的 ...
- 【Linux系统编程】 浅谈标准I/O缓冲区
标准I/O库提供缓冲的目的是尽可能地减少使用read和write调用的次数.它也对每个I/O流自动地进行缓冲管理,从而避免了应用程序需要考虑这一点所带来的麻烦.不幸的是,标准I/O库最令人迷惑的也是它 ...
- 行缓冲,全缓冲,无缓冲的详细介绍
一.标准IO缓冲区 1.1缓冲区的类型 行缓存:和终端相关的缓冲区就是行缓存 stdin stdout 全缓存: 和文件相关的就是全缓存 fopen打开的文件 不缓存:没有缓冲区 stderr 二.缓 ...
最新文章
- 阻燃防火电缆在数据中心建设中的应用
- 喜大普奔:Datawhale开源项目《李宏毅机器学习完整笔记》发布了!
- 学Java好还是学Python好?这里有些建议
- 【操作系统】互斥:软件解决方法
- chrome vue插件_VS Code 前端常用插件推荐
- python没有上方工具栏_PyQt5快速上手基础篇8-菜单栏、工具栏和状态栏
- 单利计算与复利计算程序
- 聊聊lettuce的sentinel连接 1
- 简述python_python 入门简述
- 计算机u盘序列号,注册表查询usb设备序列号,u盘电序列号注册表
- Unity lua行为树实现(可实现rpg挂机自动战斗)
- 做容器就要做“专”!云宏 Rancher联合解决方案WinGarden2.0容器云平台正式发布!
- 程序员要被革命了,微软推出自己会编程的“AI 程序员”插件
- 笔记本题目 复习(一)
- UE4基础动画包导出FBX格式动画文件(附CSDN下载)
- 大数据学习----Javase----Day13【QQ号,二分查找】
- 2022最新版Redis入门到精通(云课堂视频学习笔记)
- 如何在NSIS中执行BAT文件
- crossorigin属性:为什么它是避免tainted canvases的关键?
- Java毕业设计-幼儿园门户网站管理系统
热门文章
- JVM 调优实战--常用命令参数及PS收集器的GC日志格式
- 【软考-软件设计师】输入/输出技术
- python 保存本地乱码_请教大神,如何解决保存后的文件的乱码问题
- spring核心功能包中已经包含了cglib功能
- python(matplotlib4)——Scatter 散点图,Bar柱状图(方向:向上,向下),柱状图添加注释
- Linux C : Makefile 的编写和示例
- 题库练习5(句子逆序、字符串排序、int型二进制表示中1的个数、购物单)
- mysql8.0.20忘记密码_mysql8.0.19忘记密码的完美解决方法
- 通过TCP调试助手传输数据时的注意事项
- mysql1215_这15条MySQL改善经验必须收藏