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

贵州安顺建设局网站免费追剧永久免费app

贵州安顺建设局网站,免费追剧永久免费app,个人网站怎么建,找做牙工作上哪个网站缓冲区的认识 缓冲区#xff08;buffer#xff09;是存储数据的临时存储区域。当我们用C语言向文件中写入数据时#xff0c;数据并不会直接的写到文件中#xff0c;中途还经过了缓冲区#xff0c;而我们需要对缓冲区的数据进行刷新#xff0c;那么数据才算写到文件当中。… 缓冲区的认识 缓冲区buffer是存储数据的临时存储区域。当我们用C语言向文件中写入数据时数据并不会直接的写到文件中中途还经过了缓冲区而我们需要对缓冲区的数据进行刷新那么数据才算写到文件当中。而缓冲区通常是一块内存区域可以是数组、队列、链表等数据结构。 代码举例 int main() {//C接口FILE* fpfopen(log.txt,w);//创建文件const char* buffer hello buffer\n; fwrite(buffer,strlen(buffer),1,fp);//文件写入//系统接口close(fp-_fileno);return 0; }此时的数据其实就是写进了缓冲区中但是我们此时的调用接口是不一样的关闭文件调用的是系统调用接口而且FILE结构体中是封装了文件描述符的。先认识后续会讲述原因。 其实我们是可以将我们缓冲区中的数据给刷新出来 int main() {FILE* fpfopen(log.txt,w);const char* buffer hello buffer\n; fwrite(buffer,strlen(buffer),1,fp);fflush(fp);//刷新缓冲区close(fp-_fileno);return 0; }为什么要有缓冲区的存在 其实缓冲区的存在就是为了减少对数据的访问次数当我们输入输出数据的时候其实就是对文件信息进行交互的一切皆文件。我们为了避免每一次的文件访问IO操作从而会降低效率所以说可以建立一个像缓冲区这样的中转站将数据与缓冲区交互然后将所有的数据都接收处理好了以后再交给文件。 缓冲区的刷新方式 立即刷新无缓冲行刷新行缓冲缓冲区满了刷新全缓冲强制刷新 一般对于显示器文件的刷新方式是行刷新\n也是进行行刷新而一般磁盘上的文件的刷新方式就是缓冲区满了再刷新。 我们也可以通过fflush函数强制的进行刷新缓冲区。而且进程退出后都会采取强制刷新但是此时如果文件已经close的话底层fd没了数据依旧刷不进去的。 此时就可以浅浅的解释我们开始写的代码的因为我们的一般文件的刷新策略是缓冲区满了才刷新的这正是因为我们向log.txt这个文件里写的数据没有写满缓冲区所以导致缓冲区没有刷新从而该文件中并没有数据。其实如果你多写一些数据进去的话其实是可以写满的。 缓冲区与操作系统无关 结论我们写代码时的缓冲区其实是属于C语言的与操作系统并无关系。 int main() {FILE* fpfopen(log.txt,w);const char* buffer helllo buffer\n; fwrite(buffer,strlen(buffer),1,fp);fclose(fp);//C语言接口return 0; }  该段代码的区别就是用了C语言接口关闭文件。而我们开头的那段代码是系统调用关闭文件。仅仅换了一种关闭方式就导致了文件中一个有数据一个没数据。所以说可以知道C语言中的fclose其实是封装了系统调用的close但是还多了一个步骤刷新缓冲区。 也可以说明系统调用接口其实是没有缓冲区这个概念的缓冲区其实是我们C语言库中后期封装好的。 经典样例 代码一 int main() {printf(C:printf\n);fprintf(stdout,C:fprintf\n);fputs(C:fputs\n,stdout);const char* arr system:write\n;write(1,arr,strlen(arr));return 0; }代码二 int main() {printf(C:printf\n);fprintf(stdout,C:fprintf\n);fputs(C:fputs\n,stdout);const char* arr system:write\n;write(1,arr,strlen(arr));fork();//创建子进程return 0; } 就上面的两段代码唯一的区别就是在程序结束之前是否创建了子进程。 现象就是代码一没有创建子进程而且就如我们意想的结果一样正常打印数据到log.txt文件当中而代码二在打印结束的时候创建了子进程最终log.txt文件中的数据打印了两份除了系统调用write函数之外。 其实在我们./test.exe log.txt 将本应该打印到显示器文件的数据重定向到log.txt文件当中时就改变了缓冲区的刷新策略从原先的行数新变成了缓冲区满了再刷新。所以在执行fork函数创建子进程之前的所有数据依旧还是存在缓冲区当中而创建子进程后父子进程代码共享数据采用写时拷贝的方式存在着。当假设父进程先结束退出以后此时父进程的缓冲区就会被强制刷新也就是相当于清空缓冲区数据而此时的子进程必然是会发生写时拷贝数据独有一份所以最终子进程退出时缓冲区的数据也会被强制刷新所以最终数据就有两份了。 而针对于系统调用write函数并不是将数据写进缓冲区当中而是直接写到操作系统中因此以上操作就与该函数无关。 缓冲区在哪里   我们知道缓冲区与操作系统无关所以缓冲区在哪里呢其实就在FILE的结构体中。 就那我们比较熟悉的函数fflush该函数的作用是刷新缓冲区而参数就是FILE*的文件指针所以此时其实就可以看出端倪了。 FILE其实是一个结构体我们前面知道FILE结构体当中封装了文件描述符其实也有缓冲区其实就是一些指针。
http://www.hkea.cn/news/14302611/

相关文章:

  • iis如何发布asp.net网站wordpress 财经插件
  • 深圳优秀网站建设网站建设建材
  • 建站宝盒如何使用纪念馆展厅设计
  • 一 网站建设管理基本情况保险哪家好
  • 巫山集团网站建设一站式快速网站排名多少钱
  • 建网站公司销售广州网站建设鞍山
  • 网站设计怎么保持风格一致平面设计师推荐网站
  • 学校网站建设目的是什么意思免费行情软件app网
  • 滨州哪里有做网站的广州白云做网站
  • 手机网站好还是h5好开建筑公司取名字如何取好旺
  • 广州黄埔做网站的公司国家有规定必须做可信网站验证
  • 做海报 画册的素材网站专业的聊城网站优化
  • 徐州市城乡和住房建设局网站南宁百姓网
  • 深圳品牌网站建设服务费用北美购物网站排名
  • 网站模版建设工具南阳网站建设费用
  • 成功的营销网站企业密信下载app下载官网
  • 网站用户体验设计中国互联网协会什么级别
  • 网站建设价格兴田德润i网址多少微商怎么引流被别人加
  • 做一个网站 如何盈利模式WordPress首页做成插件
  • 网站侧栏设计珠海网站建设排名
  • 视频网站界面设计用老域名做新网站 权重怎么传递
  • 制作营销型网站公司数据库修改wordpress登录密码忘记
  • 佛山微信网站建设多少钱网站建设搜索优化app推广新闻营销
  • 网站开发保密协议模板云南网站建设快速排名
  • 科丰化工东莞网站建设关键词搜索量查询
  • 做搜狗网站优化点成都私人做公司网站的
  • 网站注册空间水利网站建设管理汇报
  • 怎么做最简单的网站做网站比较好的软件
  • 邹城手机网站建设关于动漫制作专业
  • 南通城市建设集团网站长治做网站哪里不错