标准I/O缓冲:全缓冲、行缓冲、无缓冲
说明:我仅仅对网络资源进行了整合,方便学习~。~
基于流的操作终于会调用read或者write函数进行I/O操作。为了使程序的执行效率最高,流对象一般会提供缓冲区,以降低调用系统I/O库函数的次数。
基于流的I/O提供下面3种缓冲:
全缓冲:直到缓冲区被填满,才调用系统I/O函数。对于读操作来说,直到读入的内容的字节数等于缓冲区大小或者文件已经到达结尾,才进行实际的I/O操作,将外存文件内容读入缓冲区;对于写操作来说,直到缓冲区被填满,才进行实际的I/O操作,缓冲区内容写到外存文件里。磁盘文件一般是全缓冲的。
行缓冲:直到遇到换行符'/n',才调用系统I/O库函数。对于读操作来说,遇到换行符'/n'才进行I/O操作,将所读内容读入缓冲区;对于写操作来说,遇到换行符'/n'才进行I/O操作,将缓冲区内容写到外存中。因为缓冲区的大小是有限的,所以当缓冲区被填满时,即使没有遇到换行符'/n',也相同会进行实际的I/O操作。标准输入stdin和标准输出stdout默认都是行缓冲的。
无缓冲:没有缓冲区,数据会马上读入或者输出到外存文件和设备上。标准出错stderr是无缓冲的,这样保证错误提示和输出可以及时反馈给用户,供用户排除错误。
以上3种缓冲区分别定义为3个宏,其定义例如以下表所看到的。
|
缓冲区类型 |
定 义 的 宏 |
|
全缓冲 |
_IOFBF |
|
行缓冲 |
_IOLBF |
|
无缓冲 |
_IONBF |
在使用上表所述的缓冲类型宏时,应将文件流对象中的缓冲区标志与该宏做"与"操作,推断结果是否为0就可以知道该缓冲文件流的缓冲区是否属于该类型了。
详细样例參考 http://hi.baidu.com/hp_roc/blog/item/47eedcef85e2b7dfb31cb19e.html
几个退出函数:
1、exit ()。调用exit函数之后,它首先会运行一系列的清理处理,包含调用运行各终止处理程序,关闭全部标准IO流等,然后进入内核。
2、_exit ()。与exit不同的是,它不进行清理工作而直接进入内核。此函数由POSIX.1说明,放在unistd.h里面。
3、_Exit ()。相同,它也不进行清理工作而直接进入内核。此函数跟exit一样由ISO C说明,放在stdlib.h里面。
对于退出函数对于缓冲区冲洗的效果以下这个链接讲的比較具体:
http://blog.csdn.net/seton040/archive/2009/08/31/4504825.aspx
标准I/O缓冲:全缓冲、行缓冲、无缓冲的更多相关文章
- golang的缓冲channel和无缓冲channel的区别
话说golang的channel同步的定义真是让人无力吐槽,码农的用户体验就这么难搞么,超耐磨阿,无缓冲和缓冲居然有这么大区别....靠 转载一段网上的资料 --------------------- ...
- unix 全缓冲、行缓冲、无缓冲
基于流的操作最终会调用read或者write函数进行I/O操作.为了使程序的运行效率最高,流对象通常会提供缓冲区,以减少调用系统I/O库函数的次数. 基于流的I/O提供以下3种缓冲: 全 缓冲:直到缓 ...
- 第五篇:使用无缓冲IO函数读写文件
前言 本文介绍使用无缓冲IO函数进行文件读写. 所谓的无缓冲是指该IO函数通过调用系统调用实现,其实系统调用内部的读写实现也是使用了缓冲技术的. 读写步骤 1. 打开文件 open 函数 2. 读写文 ...
- 使用无缓冲IO函数读写文件
前言 本文介绍使用无缓冲IO函数进行文件读写. 所谓的无缓冲是指该IO函数通过调用系统调用实现,其实系统调用内部的读写实现也是使用了缓冲技术的. 读写步骤 1. 打开文件 open 函数 2. 读写文 ...
- go无缓冲通道
package main import ( "fmt" "math/rand" "sync" "time" ) //wg ...
- go之无缓冲channel(通道)和有缓冲channel(通道)
channel我们先来看一下通道的解释:channel是Go语言中的一个核心类型,可以把它看成管道.并发核心单元通过它就可以发送或者接收数据进行通讯,这在一定程度上又进一步降低了编程的难度.chann ...
- 无缓冲文件IO和目录操作
引言 在后台开发中,对于文件I/O我们通常不使用C语言封装的fopen.fread.fwrite标准I/O,而是直接使用Linux提供的系统调用函数.因为这些系统调用没有使用用户缓冲区,我们直接与内核 ...
- Unix无缓冲文件操作函数、文件信息查询
问题描述: Unix无缓冲文件操作函数.文件信息查询 问题解决: struct stat 结构体信息: 具体代码: 具体源文件:
- golang channel无缓冲通道会发生阻塞的验证
公司搞了午间技术par,本周我讲的主题是关于无缓冲通道channel是否会发生阻塞,并进行了验证. go语言中channel分为无缓冲通道和有缓冲通道两种 channel提供了一种在goroutine ...
随机推荐
- Zeroonepack coming~^.^
今天抓的四道DP做完了==三道是用背包做的,突然想起来背包知识点总结还没做~反正时间还早..把01背包和完全背包小结了吧~~福利来啦~~噶呜~ 01背包: 基本思路: 01背包问题是最广为人知的动态规 ...
- 使用PageHeap.EXE或GFlags.EXE检查内存越界错误
必先利其器之一:使用PageHeap.EXE或GFlags.EXE检查内存越界错误 Article last modified on 2002-6-3 ------------------------ ...
- [Android学习笔记]Bitmap,BitmapDrawable,BitmapFactory学习笔记
Bitmap:图片文件的封装,可以看做是一张位图此类中的静态方法可以通过源Bitmap创建新的Bitmap对象此类封装了位图的一些信息Bitmap文档 BitmapFactory:一个工具类,用于创建 ...
- C++ STL中Map的相关排序操作:按Key排序和按Value排序 - 编程小径 - 博客频道 - CSDN.NET
C++ STL中Map的相关排序操作:按Key排序和按Value排序 - 编程小径 - 博客频道 - CSDN.NET C++ STL中Map的相关排序操作:按Key排序和按Value排序 分类: C ...
- vdsm的SSL证书验证过程
1. Copy the VDSM certificate of the RHEV-H(Red Hat Enterprise Virtualization Hypervisor ) host to th ...
- 2014年百度之星程序设计大赛 - 资格赛 第二题 Disk Schedule
双调欧几里得旅行商问题是一个经典动态规划问题.<算法导论(第二版)>思考题15-1和北京大学OJ2677都出现了这个题目. 旅行商问题描写叙述:平面上n个点,确定一条连接各点的最短闭合旅程 ...
- 使用Runtime.getRuntime().exec()方法的几个陷阱 (转)
Process 子类的一个实例,该实例可用来控制进程并获得相关信息.Process 类提供了执行从进程输入.执行输出到进程.等待进程完成.检查进程的退出状态以及销毁(杀掉)进程的方法. 创建进程的方法 ...
- jquery实现鼠标拖动
<html> <head> <script type='text/javascript' src='js/jquery-1.5.1.js'></scr ...
- sys_refcursor的使用方法实例
--创建过程,參数为sys_refcursor,为out型 create or replace procedure aabbsys_refcursor(o out sys_refcursor) is ...
- ContentType ,charset和pageEncoding的区别(转)
========================说法一=========================== ContentType 属性指定响应的 HTTP 内容类型.如果未指定 ContentTy ...