一、在linux系统中,标准的I/O提供了三种类型的缓冲。
1、全缓冲:在这种情况下,在填满I/O缓冲区后再进行实际的I/O操作。对于驻留在磁盘上的文件通常由标准I/O库实施全缓冲。调用fflush函数冲洗一个流。冲洗意味着将缓冲区的内容写到磁盘上。
2、行缓冲:在这种情况下,当在输入和输出遇到换行符时,标准I/O执行I/O操作。允许我们一次输出一个字符。涉及一个终端时,通常使用行缓冲。
对于行缓冲,有两个限制。第一,因为标准I/O库收集每一行的缓冲区的长度是固定的,所以只有填满的了缓冲区,那么即使没有换行符,也会进行I/O的操作。第二,任何时候只要通过标准I/O库要求从a一个布袋缓冲的流,或者b一个行缓冲的流(它要求从内核得到数据)得到输入数据,那么就会造成冲洗所有行缓冲输出流。在b中带了一个在括号中的说明,其理由是,所需的数据可能已在缓冲区中,他并不需求在需要数据时才从内核读数据。很明显,从不带缓冲的一个流中进行输入要求当时从内核得到数据。
3、不带缓冲的。标准I/O不对字符进行缓冲处理。例如:如果标准I/O函数fputs写15个字符到不带缓冲的流上,就会调用write的相关的函数立即写入打开的文件上。
二、通过下面的代码,可以更清楚的了解全缓冲和行缓冲的区别。
#include<stdio.h>
#include<unistd.h>
int glob=6;
char buf[]="a write ro stdout\n";
int main()
{
int var;
pid_t pid;
printf("a write to stdout\n");
//fflush(NULL);
if((pid=fork())<0)
{
printf("fork error");
}
else
{
if(pid==0)
{
glob++;
var++;
}
else
{
sleep(2);
//i++;
}
}
printf("pid=%d,glob=%d,var=%d\n",getpid(),glob,var);
exit(0);
}
编译后运行结果:
gcc buff.c -o buff
./buff
再者,运行./buff>temp
cat temp
第一种编译的时候,因为采用的是交互式终端,所以采用的是行缓冲 ,在printf之后立即刷新缓冲区。
第二种编译,将I/O重定向在temp文件中,查看temp的文件,会有两次输出a write to stdout,因为它采用的是全缓冲。
可以将程序中fflush(NULL)加入,则只会输出一次
a write to stdout
因为flush即时刷新了缓冲区
分享到:
相关推荐
(1)全缓冲。输入或输出缓冲区被填满,会进行实际I/O操作。其他情况,如强制刷新、进程结束也会进行实际I/O操作。 对于读操作来说,当读入内容的字节数等于缓冲区大小或者文件已经到达结尾,或者强制刷新,会进行...
Cesium 绘制缓冲区 点 线 面缓冲区 预览:http://dongnan185.com:8083/videos/draw.mp4 启动:npm i npm run serve
通过将新的数据块插入缓冲区的中部,并根据访问活动(频率)调整缓冲区链,每个数据缓冲区就被分割成两个部 分:热区(hot section),代表数据缓冲区的最近使用的一半;冷区(cold section),代表数据缓冲区的最早...
操作系统缓冲池模拟和实现(C++版) 用来实现和模拟操作系统中缓冲池的操作 很有用操作系统缓冲池模拟和实现(C++版) 用来实现和模拟操作系统中缓冲池的操作 很有用
BitBlt+双缓冲BitBlt+双缓冲BitBlt+双缓冲
一般应用开启双缓冲和不开基本没有有明显区别,此资源没有技术性相关代码,仅使用自带的双缓冲属性,用极端的情况让你感受到在特殊情况下开启双缓冲和不开启的明显区别。
GIS缓冲区和叠加分析 GIS缓冲区分析算法和 叠加分析算法
buffer应用缓冲区 socket应用层
页面载入缓冲效果,加载页面 页面载入 页面缓冲效果 页面缓冲特效,在网上找了很久,总结了一下,发上来
在通信程序中,经常使用环形缓冲区作为数据结构来存放通信中发送和接收的数据。环形缓冲区是一个先进先出的循环缓冲区,可以向通信程序提供对缓冲区的互斥访问。
缓冲区溢出教程缓冲区溢出教程缓冲区溢出教程缓冲区溢出教程
使用java代码编写的线缓冲区生成算法,下载工程,导入Eclipse直接可用,采用的缓冲区生成算法为平行双线法
很经典很详细的pdf资料整理,让你快速明白tcp内核缓冲机制,不用再为send、recv而担忧
通过实现经典的生产者消费者问题,巩固对线程及其同步机制的学习效果,加深对相关基本概念的理解,并学习如何将基本原理和实际设计有机的结合。 2 设计要求 在Linux环境下,使用多线程和信号量机制实现经典的生产者...
研究了Na2CO3-NaHCO3缓冲液的pH值和总碱度对HS-与V5+氧化还原反应的影响,以及Na2CO3-NaHCO3缓冲液的性质。研究表明,缓冲液的pH值越高,HS-的转化率越低,缓冲液的总碱度对HS-的转化率影响不大。缓冲液的pH值随Na2CO3...
摘要:文章详细介绍了基于CMOS的芯片I/O缓冲电路分类,功能,电路及版图设计的一些考虑以及芯片引脚的静电保护问题。 关键词:I/O;缓冲电路;静电保护;CMOS 针对引脚的输入输出缓冲(I/O buffer)电路设计,...
点和线多边形缓冲区,c#编写代码,可以使用在目前流行的瓦片地图API中。
黑子和白子问题;理发师问题;get、copy和put对缓冲区S和T操作过程;3个并发进程R、M、P共享同一缓冲区
实现cesium的点、线、面的缓冲分析类的封装