我的编程空间,编程开发者的网络收藏夹
学习永远不晚

有哪些缓冲类型

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

有哪些缓冲类型

这篇文章主要介绍“有哪些缓冲类型”,在日常操作中,相信很多人在有哪些缓冲类型问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”有哪些缓冲类型”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

缓冲

为了减少使用read和write调用的次数,标准IO库提供了缓冲,有人可能会问,为什么要减少它们的调用次数?很明显read和write是系统调用,它们花费的时间将会更多,本文不展开描述。那么有哪三种缓冲类型呢?

全缓冲

在全缓冲的情况下,在填满标准I/O缓冲区后,才进行实际的I/O操作。写磁盘文件通常就是全缓冲的。举个例子:

#include<stdio.h> #include<unistd.h> int main(void) {          FILE *fp = fopen("./test.txt","w+");     if(NULL == fp)     {         perror("open file failed");         return -1;     }          char buf[] = "wechat:shouwangxiansheng\n";     fwrite(buf,sizeof(char),sizeof(buf),fp);     //fflush(fp);          sleep(20);     fclose(fp);     return 0; }

打开一个文件,并向里面写入一段字符串。我们编译并运行:

$ gcc -o buff buff.c $ cat test.txt wechat:shouwangxiansheng $ ./buff

此时观察test.txt:

$ cat test.txt

发现它的内容是空!明明已经写入了为什么会什么东西都没有?原因在于它默认是全缓冲的,因此在将内容写入文件后,并没有直接存在文件中,当程序关闭文件或者程序运行完成退出后,再次查看:

发现文件已经有了内容。除了等待程序运行完成,还可以使用fflush函数,它可以将缓冲区中的内容写入到磁盘中(终端驱动设备表示丢弃缓冲区的数据)。所以将fwrite下面一行的注释去掉后,就可以发现,写入之后,就可以直接在文件中看到内容了。所以当你在写一个文件,但是查看文件却没有任何写入内容时,不要一直怀疑自己的代码。

行缓冲

行缓冲指的是当遇到换行符时,或者缓冲区已经满了(一般1024字节),标准I/O库执行I/O操作。同样举个例子:

#include<stdio.h> #include<unistd.h> int main(void) {     printf("wechat:shouwangxiansheng");     sleep(10);     return 0; }

编译运行上面的程序:

$ gcc -o lineBuff lineBuff.c $ ./lineBuff

你会发现,printf执行完了之后,内容并没有马上输出到终端,而是在程序运行完之后才输出。聪明的你当然也知道,要想打印完后直接输出到终端,只需要改成下面这样就可以了:

printf("wechat:shouwangxiansheng\n");

不带缓冲

这个从字面就可以理解其意思了。同样举个例子:

noBuff.c*/ #include<stdio.h> #include<unistd.h> int main(void) {     fprintf(stderr,"wechat:shouwangxiansheng");     sleep(10);     return 0; }

编译运行你就会发现,运行完fprintf语句后,内容直接输出在终端,而不需要等到换行。一般来说,标准错误是不带缓冲的。

总结

通过上面的一些例子,我们也发现了这样一些规律:

  • 通常磁盘上的文件是全缓冲区的

  • 标准输入和标准输入通常是行缓冲的

  • 指向终端设备的流通常是行缓冲,而指向文件时,则是全缓冲

  • 为了尽可能显示错误信息,标准错误是不带缓冲的

到此,关于“有哪些缓冲类型”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

有哪些缓冲类型

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java中的缓冲流类型有哪些

这期内容当中小编将会给大家带来有关java中的缓冲流类型有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和
2023-06-14

php缓存类型有哪些

本篇内容介绍了“php缓存类型有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php缓存类型有5种:1、数据缓存,即数据库查询PHP缓存
2023-06-22

c++缓冲区溢出的原因有哪些

C++缓冲区溢出的原因可以归纳为以下几点:输入验证不足:当用户输入的数据长度超过了程序预留的缓冲区长度时,就会导致缓冲区溢出。如果在读取用户输入之前没有对输入数据进行合法性检查和长度验证,缓冲区溢出就有可能发生。字符串处理函数的不安全使用:
2023-10-23

不可不知的三种缓冲类型

为什么有时候写入文件的内容却没有?没什么printf打印在终端的内容看不到?这一切背后有着怎样早为人知的秘密?今天来说说缓冲的事。也许你已经听说过三种缓冲模式,但是今天要讲的不止这些。

Java 中 reference 的类型有哪些?(java reference的类型有哪些)

在Java编程语言中,reference(引用)是用于引用对象的一种机制。Java中的reference主要有以下几种类型:1.强引用(StrongReference)这是最常见的引用类型。当一个对象被强引用所引用时,垃圾回收器
Java 中 reference 的类型有哪些?(java reference的类型有哪些)
Java2024-12-20

RDD的类型有哪些

这篇文章主要讲解了“RDD的类型有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“RDD的类型有哪些”吧!一、RDD定义  RDD(Resilient Distributed Datase
2023-06-02

linux shell有哪些类型

本篇内容主要讲解“linux shell有哪些类型”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux shell有哪些类型”吧!在linux中,shell是指
2023-03-01

Hibernate中有哪些类型分类

本篇文章给大家分享的是有关Hibernate中有哪些类型分类,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. 实体(Entities)和值(values)为了理解很多与持久化
2023-06-17

域名有哪些类型

本篇内容主要讲解“域名有哪些类型”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“域名有哪些类型”吧!以一个多见的域名为例说明,www.baidu.com网址是两部分别构成,标号“baidu”是这个
2023-06-06

linux的类型有哪些

这篇文章主要介绍了linux的类型有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇linux的类型有哪些文章都会有所收获,下面我们一起来看看吧。linux分为3类:1、Redh
2023-02-28

软考有哪些类型

  软考分为计算机软件、计算机网络、计算机应用技术、信息系统和信息服务共5个专业类别,并在各专业类别中分别设置了初、中、高级专业资格考试,各级别分别包含多个资格考试。  软考分为计算机软件、计算机网络、计算机应用技术、信息系统和信息服务共5个专业类别,并在各专业类别中分别设置了初、中、高级专业资格考试,各级别资格如下:
软考有哪些类型
2024-04-19

c#值类型有哪些

值类型是存储在栈中的数据类型,直接包含值本身。c# 值类型包括布尔型、字符型、整数型、浮点数型和十进制型。值类型具有值语义、栈分配、不可变和不支持 null 值等特性。C# 值类型值类型是一种存储在栈中的数据类型。与引用类型不同,值类型不
c#值类型有哪些
2024-04-04

有哪些元件类型

有哪些元件类型,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。元件类型有:1、图形元件,可用于静态图像和创建连接到主时间轴的可重用动画片段;2、按钮元件,可以创建
2023-06-20

Java 中 Context 究竟有哪些类型呢?(Java中的Context有哪些类型)

在Java编程中,Context(上下文)是一个非常重要的概念,它在不同的场景和框架中都有广泛的应用。了解Java中Context的不同类型对于开发高效、灵活的应用程序至关重要。一、ServletContextSer
Java 中 Context 究竟有哪些类型呢?(Java中的Context有哪些类型)
Java2024-12-19

Java 方法主要有哪些类型呢?(java方法的类型有哪些)

在Java编程中,方法是一种重要的代码组织和复用机制。Java中的方法类型主要有以下几种:1.实例方法(InstanceMethod)实例方法是定义在类内部的方法,通过类的实例对象来调用。
Java 方法主要有哪些类型呢?(java方法的类型有哪些)
Java2024-12-15

编程热搜

目录