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缓冲区:全缓冲和行缓冲相关推荐

  1. Linux系统编程21:基础IO之全缓冲和行缓冲的区别及深刻理解缓冲区及其作用

    文章目录 (1)全缓冲和行缓冲 (2)真正理解缓冲区 (1)全缓冲和行缓冲 一般来说,C库函数写入显示器属于行缓冲,也就是只要遇到一些标记,比如说'\n'就会立即刷新出去 所以上面的例子中如果不关闭1 ...

  2. C/C++ 的全缓冲、行缓冲和无缓冲

    1.简介 C/C++中,基于 I/O 流的操作最终会调用系统接口 read() 和 write() 完成 I/O 操作.为了使程序的运行效率最高,流对象通常会提供缓冲区,以减少调用系统I/O接口的调用 ...

  3. (转)标准I/O缓冲:全缓冲、行缓冲、无缓冲 .

    某日一朋友写了一个HELLO WORLD代码,出不来结果,代码如下: #include <stdio.h> int main(int argc, char **argv){     pri ...

  4. 全缓冲、行缓冲和无缓冲

    这里的缓冲是指的是用户空间的I/O缓冲区,不是内核缓冲. 无缓冲:用户层不提供缓冲,数据流直接到内核缓冲,再到磁盘等外设上.标准错误输出(2)通常是无缓存的,因为它必须尽快输出,且是输出到具有交互式的 ...

  5. 行缓冲、全缓冲、无缓冲以及用户缓冲区、内核缓冲区介绍

    文章目录 1- 缓冲区介绍 (1)缓冲区以及作用 (2)缓冲区的类型 [1]行缓冲(验证) [2]全缓冲(验证) [3]无缓冲 2- 内核缓冲区与用户缓冲区 (1)用户进程和操作系统的关系 (2)用户 ...

  6. Linux缓冲区(无缓冲,行缓冲,全缓冲)的区别

    Linux缓冲区(无缓冲,行缓冲,全缓冲)的区别 1.缓冲区的概念 1.1 全缓冲区 1.2.行缓冲 1.3 无缓冲 1.4.控制缓冲区的方式 2.demo 3.结果分析 1.缓冲区的概念 缓冲区(B ...

  7. 数据缓冲策略 —— 无缓冲、行缓冲、全缓冲(缓冲区大小测试)

    printf打印数据时,一般会先把数据放入C缓冲区,然后再刷新到内核缓冲区,最后再写入硬件 这个过程中,数据从C缓冲区迁移到内核缓冲区的操作我们称为缓冲(也可以理解为刷新) 下面我们将介绍 缓冲策略的 ...

  8. 【Linux系统编程】 浅谈标准I/O缓冲区

    标准I/O库提供缓冲的目的是尽可能地减少使用read和write调用的次数.它也对每个I/O流自动地进行缓冲管理,从而避免了应用程序需要考虑这一点所带来的麻烦.不幸的是,标准I/O库最令人迷惑的也是它 ...

  9. 行缓冲,全缓冲,无缓冲的详细介绍

    一.标准IO缓冲区 1.1缓冲区的类型 行缓存:和终端相关的缓冲区就是行缓存 stdin stdout 全缓存: 和文件相关的就是全缓存 fopen打开的文件 不缓存:没有缓冲区 stderr 二.缓 ...

最新文章

  1. 阻燃防火电缆在数据中心建设中的应用
  2. 喜大普奔:Datawhale开源项目《李宏毅机器学习完整笔记》发布了!
  3. 学Java好还是学Python好?这里有些建议
  4. 【操作系统】互斥:软件解决方法
  5. chrome vue插件_VS Code 前端常用插件推荐
  6. python没有上方工具栏_PyQt5快速上手基础篇8-菜单栏、工具栏和状态栏
  7. 单利计算与复利计算程序
  8. 聊聊lettuce的sentinel连接 1
  9. 简述python_python 入门简述
  10. 计算机u盘序列号,注册表查询usb设备序列号,u盘电序列号注册表
  11. Unity lua行为树实现(可实现rpg挂机自动战斗)
  12. 做容器就要做“专”!云宏 Rancher联合解决方案WinGarden2.0容器云平台正式发布!
  13. 程序员要被革命了,微软推出自己会编程的“AI 程序员”插件
  14. 笔记本题目 复习(一)
  15. UE4基础动画包导出FBX格式动画文件(附CSDN下载)
  16. 大数据学习----Javase----Day13【QQ号,二分查找】
  17. 2022最新版Redis入门到精通(云课堂视频学习笔记)
  18. 如何在NSIS中执行BAT文件
  19. crossorigin属性:为什么它是避免tainted canvases的关键?
  20. Java毕业设计-幼儿园门户网站管理系统

热门文章

  1. JVM 调优实战--常用命令参数及PS收集器的GC日志格式
  2. 【软考-软件设计师】输入/输出技术
  3. python 保存本地乱码_请教大神,如何解决保存后的文件的乱码问题
  4. spring核心功能包中已经包含了cglib功能
  5. python(matplotlib4)——Scatter 散点图,Bar柱状图(方向:向上,向下),柱状图添加注释
  6. Linux C : Makefile 的编写和示例
  7. 题库练习5(句子逆序、字符串排序、int型二进制表示中1的个数、购物单)
  8. mysql8.0.20忘记密码_mysql8.0.19忘记密码的完美解决方法
  9. 通过TCP调试助手传输数据时的注意事项
  10. mysql1215_这15条MySQL改善经验必须收藏