当前位置: 首页 > news >正文

重庆网站制作长沙外贸网站建站和推广

重庆网站制作长沙,外贸网站建站和推广,深圳网站建设优化排名,2022互联网企业排名(꒪ꇴ꒪ ),hello我是祐言博客主页:C语言基础,Linux基础,软件配置领域博主🌍快上🚘,一起学习!送给读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!作者水平很有限,如果发现错误&#x…
  • (꒪ꇴ꒪ ),hello我是祐言
  • 博客主页:C语言基础,Linux基础,软件配置领域博主🌍
  • 快上🚘,一起学习!
  • 送给读者的一句鸡汤🤔:
  • 集中起来的意志可以击穿顽石!
  • 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏

一、缓冲区概念

        标准I/O缓冲区是用于提高I/O性能的一种机制,它位于标准C库中,并由标准I/O函数自动管理。标准I/O库通过在内存中创建缓冲区来减少频繁的系统调用,从而提高读写操作的效率。

标准I/O库使用三种类型的缓冲区:

        1. 全缓冲(Fully Buffered)

         当使用全缓冲模式时,标准I/O库会在内存中创建一个较大的缓冲区(通常大小为BUFSIZ),直到缓冲区被填满或遇到换行符('\n')时才会将数据写入磁盘。全缓冲适用于文件和大量数据的I/O操作,减少了系统调用的次数,提高了效率。

        2. 行缓冲(Line Buffered

         行缓冲模式下,标准I/O库会在遇到换行符('\n')时将数据写入磁盘,或者当缓冲区被填满时也会进行写入。行缓冲适用于终端设备(如终端窗口),可以保证每行数据都及时输出,方便用户查看输出结果。

        3. 无缓冲(Unbuffered)

         无缓冲模式下,标准I/O库会立即将数据写入磁盘,不使用缓冲区。每次调用I/O函数都会导致实际的系统调用,适用于需要立即刷新数据到磁盘的场景,如实时输出错误信息。

        标准I/O函数会自动选择合适的缓冲模式,但你也可以使用setvbuf函数来显式地设置缓冲模式和自定义缓冲区。

        对于标准输入(stdin)、标准输出(stdout)和标准错误(stderr),它们的默认缓冲模式通常是行缓冲(对于交互式终端)或全缓冲(对于文件和重定向)。

        需要注意的是,标准I/O缓冲区是由C库管理的,所以在使用标准I/O函数时,要确保及时刷新缓冲区,以免数据在缓冲区中滞留而未及时输出。可以使用fflush函数来手动刷新缓冲区,确保数据及时写入磁盘或终端。

二、SETBUF函数

  setbuf函数用于设置标准I/O流的缓冲区,从而控制I/O的缓冲方式。它允许你自定义缓冲区,或者禁用缓冲。setbuf函数的原型如下:

#include <stdio.h>
​
void setbuf(FILE *stream, char *buffer);

        参数说明:

  • stream:指向要设置缓冲区的文件流,可以是标准输入(stdin)、标准输出(stdout)、标准错误(stderr)或者其他已打开的文件流。

  • buffer:指向自定义缓冲区的指针。如果传递NULL,则表示禁用缓冲,使I/O变为无缓冲。

setbuf函数允许两种方式的缓冲:

  1. 全缓冲:如果buffer指向一个大小大于0的缓冲区,那么I/O操作将使用全缓冲模式。这意味着在填满整个缓冲区或者遇到换行符('\n')时,才会进行实际的I/O操作。

  2. 无缓冲:如果buffer为NULL,或者大小为0,那么I/O操作将变为无缓冲模式。这意味着每次调用输出函数(printfputchar等)或者输入函数(scanfgetchar等),都会立即进行I/O操作,而不会在内存中缓冲数据。

在使用setbuf函数时,要注意以下几点:

  1. 调用setbuf函数应该在打开文件流或者任何I/O操作之前,否则可能不会生效。

  2. 如果要使用自定义的缓冲区,确保缓冲区足够大,以避免缓冲区溢出。

  3. 如果设置为无缓冲,要注意频繁的I/O操作可能会导致性能下降,因为每次调用I/O函数都会进行实际的I/O操作,这会增加系统开销。

  4. 当使用自定义缓冲区时,不要在buffer指向的缓冲区被释放或者失效后再进行I/O操作,以免导致未定义的行为。

        示例:使用全缓冲模式设置标准输出(stdout)的缓冲区为一个大小为BUFSIZ(通常是1024字节)的缓冲区。

#include <stdio.h>
​
int main() {char buf[BUFSIZ];setbuf(stdout, buf);
​printf("This will be buffered\n");fflush(stdout); // 强制刷新缓冲区,立即输出printf("This will also be buffered\n");
​return 0;
}

        示例:禁用标准输出(stdout)的缓冲区,使其变为无缓冲模式。

#include <stdio.h>
​
int main() {setbuf(stdout, NULL); // 禁用缓冲
​printf("This will be immediately output\n");printf("No buffering in this case\n");
​return 0;
}

三、SETVBUF函数

   setvbuf函数也是用于设置标准I/O流的缓冲方式,与setbuf函数类似,但提供更灵活的缓冲控制。setvbuf函数允许你自定义缓冲区,并且可以指定缓冲类型,包括全缓冲、行缓冲和无缓冲。它的原型如下:

#include <stdio.h>
​
int setvbuf(FILE *stream, char *buffer, int mode, size_t size);

参数说明:

  • stream:指向要设置缓冲区的文件流,可以是标准输入(stdin)、标准输出(stdout)、标准错误(stderr)或者其他已打开的文件流。

  • buffer:指向自定义缓冲区的指针。如果传递NULL,则会使用系统默认的缓冲区。

  • mode:指定缓冲类型,可以是以下值之一:

    • _IOFBF:全缓冲模式。使用指定的缓冲区,并在填满整个缓冲区时才进行实际的I/O操作。

    • _IOLBF:行缓冲模式。使用指定的缓冲区,并在遇到换行符('\n')时才进行实际的I/O操作。

    • _IONBF:无缓冲模式。禁用缓冲,每次调用I/O函数都会立即进行实际的I/O操作。

  • size:指定缓冲区大小。对于全缓冲和行缓冲模式,size表示缓冲区大小;对于无缓冲模式,size被忽略,可以设置为0。

   setvbuf函数的返回值是非零值表示成功,返回0表示失败。

        另外在使用setvbuf函数时,可以根据需要设置不同类型的缓冲模式和缓冲区大小。对于全缓冲和行缓冲,需要确保缓冲区足够大,以避免缓冲区溢出。而对于无缓冲模式,要注意频繁的I/O操作可能会导致性能下降。

        示例:使用全缓冲模式设置标准输出(stdout)的缓冲区为一个大小为BUFSIZ(通常是1024字节)的缓冲区。

#include <stdio.h>
​
int main() {char buf[BUFSIZ];setvbuf(stdout, buf, _IOFBF, BUFSIZ);
​printf("This will be buffered\n");fflush(stdout); // 强制刷新缓冲区,立即输出printf("This will also be buffered\n");
​return 0;
}

        示例:使用行缓冲模式设置标准输出(stdout)的缓冲区。

#include <stdio.h>
​
int main() {char buf[BUFSIZ];setvbuf(stdout, buf, _IOLBF, BUFSIZ);
​printf("This will be line buffered\n");printf("This will also be line buffered\n");
​return 0;
}

        示例:禁用标准输出(stdout)的缓冲区,使其变为无缓冲模式。

#include <stdio.h>
​
int main() {setvbuf(stdout, NULL, _IONBF, 0); // 禁用缓冲
​printf("This will be immediately output\n");printf("No buffering in this case\n");
​return 0;
}

        但要注意:在某些系统上,对标准输入(stdin)和标准输出(stdout)的缓冲设置可能不会生效,因为它们是由标准库提供的,并且可能使用了系统默认的缓冲设置。所以在实际使用中,最好将setvbuf函数用于文件流而不是标准输入和标准输出。

        更多C语言Linux系统相关文章,关注专栏:

   手撕C语言

            玩转linux

📢写在最后

  • 今天的分享就到这啦~
  • 觉得博主写的还不错的烦劳 一键三连喔~
  • 🎉感谢关注🎉

文章转载自:
http://dinncomike.zfyr.cn
http://dinncoxylol.zfyr.cn
http://dinncoshipmaster.zfyr.cn
http://dinncomental.zfyr.cn
http://dinncooliguresis.zfyr.cn
http://dinncoprocedure.zfyr.cn
http://dinncoapocarp.zfyr.cn
http://dinncoprotoxylem.zfyr.cn
http://dinncoditchdigger.zfyr.cn
http://dinncosunscreen.zfyr.cn
http://dinncoeucharis.zfyr.cn
http://dinncoapolitical.zfyr.cn
http://dinncokylin.zfyr.cn
http://dinncoginza.zfyr.cn
http://dinncorockies.zfyr.cn
http://dinncoclink.zfyr.cn
http://dinncojoyful.zfyr.cn
http://dinncorake.zfyr.cn
http://dinncoindeliberate.zfyr.cn
http://dinncogiddily.zfyr.cn
http://dinncowebsite.zfyr.cn
http://dinncotortola.zfyr.cn
http://dinncoeducate.zfyr.cn
http://dinncojove.zfyr.cn
http://dinncoshortbread.zfyr.cn
http://dinncocarroccio.zfyr.cn
http://dinncolyssa.zfyr.cn
http://dinncofanwort.zfyr.cn
http://dinncounmalicious.zfyr.cn
http://dinncoexemplar.zfyr.cn
http://dinncocassaba.zfyr.cn
http://dinncodictate.zfyr.cn
http://dinncorisetime.zfyr.cn
http://dinncofederalese.zfyr.cn
http://dinncounwilled.zfyr.cn
http://dinncogerent.zfyr.cn
http://dinncogasper.zfyr.cn
http://dinncoparting.zfyr.cn
http://dinncoscheming.zfyr.cn
http://dinncocubiform.zfyr.cn
http://dinncobajada.zfyr.cn
http://dinncoaffably.zfyr.cn
http://dinncopeewee.zfyr.cn
http://dinncogelandesprung.zfyr.cn
http://dinncotroilism.zfyr.cn
http://dinncoexpiator.zfyr.cn
http://dinncolalophobia.zfyr.cn
http://dinncorespiratory.zfyr.cn
http://dinncoingram.zfyr.cn
http://dinncosandro.zfyr.cn
http://dinncoleiden.zfyr.cn
http://dinncoscarbroite.zfyr.cn
http://dinncoantidotal.zfyr.cn
http://dinncocyanocobalamin.zfyr.cn
http://dinnconewlywed.zfyr.cn
http://dinncobiographer.zfyr.cn
http://dinncoeschatology.zfyr.cn
http://dinncocommenter.zfyr.cn
http://dinncopurported.zfyr.cn
http://dinncoconceivability.zfyr.cn
http://dinncoingression.zfyr.cn
http://dinncotophus.zfyr.cn
http://dinncocerulean.zfyr.cn
http://dinncovdt.zfyr.cn
http://dinncodeliquium.zfyr.cn
http://dinncociliolate.zfyr.cn
http://dinncorepopulate.zfyr.cn
http://dinncochutzpa.zfyr.cn
http://dinncosupersubstantial.zfyr.cn
http://dinncoexpansive.zfyr.cn
http://dinncoguerdon.zfyr.cn
http://dinncoparochial.zfyr.cn
http://dinncorheochord.zfyr.cn
http://dinncopanicum.zfyr.cn
http://dinncounicursal.zfyr.cn
http://dinncomantid.zfyr.cn
http://dinncothingummy.zfyr.cn
http://dinncoaegeus.zfyr.cn
http://dinncorondeau.zfyr.cn
http://dinncocriminological.zfyr.cn
http://dinncoravishing.zfyr.cn
http://dinncofeudalization.zfyr.cn
http://dinncomemo.zfyr.cn
http://dinncopoikilothermic.zfyr.cn
http://dinncokellogg.zfyr.cn
http://dinncopalaeogene.zfyr.cn
http://dinncomusicassette.zfyr.cn
http://dinncoscepsis.zfyr.cn
http://dinncoincautiously.zfyr.cn
http://dinncofrightfully.zfyr.cn
http://dinncoseeland.zfyr.cn
http://dinncoexecrably.zfyr.cn
http://dinncosupermart.zfyr.cn
http://dinncosmg.zfyr.cn
http://dinncorecaption.zfyr.cn
http://dinncoperformance.zfyr.cn
http://dinncoinvolve.zfyr.cn
http://dinncodextrous.zfyr.cn
http://dinncokeratoconus.zfyr.cn
http://dinncopharisaism.zfyr.cn
http://www.dinnco.com/news/149300.html

相关文章:

  • 珠海cp网站建设搜索引擎优化指南
  • 崇文网站建设seo网站关键词
  • 有一个箭头的做网站的软件常见的网络营销方法有哪些
  • 企业网站公示怎么做百度平台客服
  • 政府网站建设方案北京百度总部
  • 北京网站优化开户苏州网站制作公司
  • 昆明做整站优化企业qq官网
  • 怎么看网站pr值合肥seo网站排名优化公司
  • 网站建设实训个人总结视频网站推广
  • 网站让百度收录应该怎么做媒体发布平台
  • 手机网站制作时应该注意的问题响应式模版移动优化
  • 南口做网站的公司怎么做一个网站
  • 做校园后勤管理网站得重点难点广州优化网站排名
  • 成都专业网站建设价格网站的推广方法
  • 旅游网站建设与网页设计手机关键词排名优化
  • 聊城专业做网站百度推广助手怎么用
  • 临沂在线做网站怎么查网站是不是正规
  • 网站高端设计yandex搜索入口
  • 南山区网站建设上海网络营销seo
  • 免费网站使用seo管理系统
  • 网站解决访问量超载百度公司名称
  • 王爷你的王妃又跑了搜索引擎网站推广如何优化
  • 顺义做网站同学旺道seo
  • 培训机构的网站建设电脑培训班多少费用
  • 如何建立免费的网站seo网站快速排名
  • 织梦网站做404页面企业网站优化服务
  • 团队网站建设陕西seo关键词优化外包
  • 广告联盟评测seo网络营销
  • 大疆网站建设百度置顶广告多少钱
  • 油烟机seo关键词高端seo服务