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

三亚h5网站定制开发公司建立一个个人介绍网站

三亚h5网站定制开发公司,建立一个个人介绍网站,wordpress文章页图片,做网站最便宜要多少钱一、I/O缓存的背景 I/O缓存是指在内存里开辟一块区域,存放用来接收用户输入和用于计算机输出的数据,以减小系统开销和提高外设效率。linux对IO文件的操作分为不带缓存的IO操作和带缓存的IO操作(标准IO操作)。为什么存在C标准I/O库…

一、I/O缓存的背景

I/O缓存是指在内存里开辟一块区域,存放用来接收用户输入和用于计算机输出的数据,以减小系统开销和提高外设效率。linux对IO文件的操作分为不带缓存的IO操作和带缓存的IO操作(标准IO操作)。为什么存在C标准I/O库函数与Unbuffered I/O函数?它们有什么区别?

二、带缓存的I/O操作

​带缓存IO(标准IO),不依赖系统内核,所以移植性强,使用标准IO操作为了减少对read()和write()的系统调用次数,带缓存IO其实就是在用户层再建立一个缓存区,这个缓存区的分配和优化长度等其他细节都是标准IO库代你处理好了。系统调用如图所示

比如要写数据到文件上,内核缓存区长度是100字节,我们调用不带缓存的IO函数write()就要调用10次,这样系统效率低。

现在我们在用户层建立另一个缓存区(用户层缓存区或者叫流缓存),假设流缓存的长度是50字节,我们用标准C库函数的fwrite()将数据写入到这个流缓存区里面,流缓存区满50字节后在进入内核缓存区,此时再调用系统函数write()将数据写入到文件(实质是磁盘)上标准IO操作fwrite()最后还是要掉用无缓存IO操作write,这里进行了两次调用fwrite()写100字节也就是进行两次系统调用write()函数。

​ 无缓存IO操作数据流向路径:数据——内核缓存区——磁盘
​ 标准IO操作数据流向路径:数据——流缓存区——内核缓存区——磁盘

​ 标准I/O对每个I/O流自动进行缓存管理(标准I/O函数通常调用malloc来分配缓存)。它提供了三种类型的缓存:
​ 1) 全缓存:缓存满时I/O操作。磁盘上的文件通常是全缓存的。
​ 2)行缓存。当输入输出遇到新行符或缓存满时.stdin、stdout通常是行缓存的。
​ 3)无缓存。相当于read、write了。stderr通常是无缓存的

三、无缓存I/O(Unbuffered )I/O函数

刚看到这个"unbuffered",读者就觉得奇怪,操作系统不是对所有的输入输出都会做缓存吗(delayed write),为什么还会存在unbuffered?

其实,这里的ubuffered,是指的是针对与read和write本身来说,它们是没有缓存机制,比如read(fd,temp,100),在读够100个字节后或者遇到文件EOF后就返回,非常单纯。而C标准库函数中的fread和fwrite,就是利用缓存技术来调用read和write,可以说是buffered I/O。

但是,叫做无缓存IO是因为在用户层没有缓存,但对于Linux内核来说,还是进行了缓存,只是用户层看不到罢了。

这些不带缓存的I/O函数不是标准 C的组成部分,但是,它们是POSIX.1和Single UNIX Specification的组成 部分。C标准库函数是C标准的一部分,而Unbuffered I/O函数是UNIX标准的一部分。只有在UNXI平台上才能用Unbuffered I/O函数,windows上不行。所以C标准I/O库函数在头文件stdio.h中声明,而read、 write等函数在头文件unistd.h中声明。
 

四、两种I/O函数使用场景

open、read、write、close等系统函数称为无缓冲I/O(Unbuffered I/O)函数,用户程序在读写文件时既可以调用C标准I/O库函数,也可以直接调用底层的Unbuffered I/O函数,那个各自使用场景是什么呢?

  • 用Unbuffered I/O函数每次读写都要进内核,调一个系统调用比调一个用户空间的函数要慢很多,所以在用户程序开辟I/O缓冲区还是必要的,用C标准I/O库函数比较方便,省去自己开辟内存空间。
  • 用C标准I/O库函数要时刻注意I/O缓冲区和实际文件有可能不一致,在必要时调用fflush(3)。
  • UNIX的传统是Everything is a file,I/O函数不仅可以读写文件还可以读写设备。在读写设备时通常是不希望有缓冲的。比如网络设置的读写就希望是实时读写,而不希望只写到缓冲区里,所以网络编程通常直接调用Unbuffered I/O函数。
     

五、磁盘交互的读写文件流程

当应用程序尝试读取磁盘上的某块数据的时候,如果这块数据已经存放在页缓存(内核高速缓存)中,那么这块数据就可以立即返回给应用程序,而不需要经过实际的物理读盘操作。当然,如果数据在应用程序读取之前并未被存放在页缓存中),那么就需要先将数据从磁盘读到页缓存中去。

对于写操作来说,应用程序也会将数据先写到页缓存中去(这里所说的写到页缓存中,如果是调用标准库I/O进行写,那么首先是写到标准库的缓冲区内,如果标准库的缓冲区写满以后,在写到页缓冲内;如果是系统调用,那么直接写到页缓冲内)。

数据是否被立即写到磁盘上去取决于应用程序所采用的写操作机制:如果用户采用的是同步写机制,那么数据会立即被写回到磁盘上,应用程序会一直等到数据被写完为止;如果用户采用的是延迟写机制,那么应用程序就完全不需要等到数据全部被 写回到磁盘,数据只要被写到页缓存中去就可以了。

在延迟写机制的情况下,操作系统会定期地将放在页缓存中的数据刷到磁盘上。与异步写机制不同的是,延迟写机制在数据完全写到磁盘上得时候不会通知应用程序,而异步写机制在数据完全写到磁盘上得时候是会返回给应用程序的。所以延迟写机制本省是存在数据丢失的风险的,而异步写机制则不会有这方面的担心。

 

参考:

带缓冲I/O 和不带缓冲I/O的区别与联系-CSDN博客

理解标准I/O库的缓冲机制及应用-CSDN博客

unix系统编程小结(一)------文件I/O-neilhappy-ChinaUnix博客


 


文章转载自:

http://54OH0M0N.xkppj.cn
http://GUd5G5YF.xkppj.cn
http://1O5wIaLq.xkppj.cn
http://AwJAVDJA.xkppj.cn
http://sIw6oR2p.xkppj.cn
http://gekqR8Yx.xkppj.cn
http://SNtwKREt.xkppj.cn
http://89iepDfu.xkppj.cn
http://FBwqNX4O.xkppj.cn
http://zpBViMoO.xkppj.cn
http://J0crTZXl.xkppj.cn
http://423W18c3.xkppj.cn
http://IwoPWXpa.xkppj.cn
http://VHRgbWIK.xkppj.cn
http://e9pdDXig.xkppj.cn
http://j72NbSow.xkppj.cn
http://J3vIKe67.xkppj.cn
http://yyMcQD5M.xkppj.cn
http://d5RycmVF.xkppj.cn
http://As8Orh1G.xkppj.cn
http://RAfXZorL.xkppj.cn
http://Z3jxxOl6.xkppj.cn
http://d0Y7KGhW.xkppj.cn
http://VH1vxoAD.xkppj.cn
http://px2j1QeS.xkppj.cn
http://dIhsMp1y.xkppj.cn
http://aU4RnH0E.xkppj.cn
http://sxupQnN9.xkppj.cn
http://nkjJFj3V.xkppj.cn
http://wI39i35x.xkppj.cn
http://www.dtcms.com/wzjs/628909.html

相关文章:

  • ii6创建网站武夷山市建设局网站
  • 宁波网络建站模板广州网页设计html
  • 免费网站优化软件莱芜最好的网站建设公司
  • 深圳给企业做网站营销机构代码怎么填
  • 怎么建设网站平台网站怎么发邮件
  • 做自媒体一般都注册几个网站郑州企业网站排名
  • dw做的个人网站wordpress密码忘记
  • 南通做网站价格广州制片公司网站
  • 网站建设公司保定市手机建设中网站首页
  • 长沙建站模板平台合肥最新通知今天
  • 网站模板源码下载网数字营销证书
  • 网站代码的重点内容是什么万能应用商店下载
  • 东湖南昌网站建设公司东莞如何建设网站制作平台
  • 设计师配色网站成都住建局官网智慧工地
  • 网站建设公司包括哪些内容我想花钱做网站
  • 中山台州网站建设推广烟台哪儿有可以做淘宝网站的
  • 金华住房与城乡建设部网站数据分析师需要学哪些课程
  • nodejs做后端的网站请人做网站得多少钱
  • 关于建设网站的会议纪要网站建设前景怎么样
  • 企业网站开发文献综述成都房地产交易中心官网
  • 做响应式网站一般都用哪些框架社团网站建设的功能定位
  • 昆明制作手机网站千锋教育招聘
  • 网站数据中心的建设wordpress 升级失败
  • 企业网站建设试题萍乡做网站的公司有哪些
  • 赣州网站制作公司建设兼职网站目的
  • 做一个在线支付网站搜索关键词技巧
  • 自己做网站转发新闻违法么下载官方正版app
  • 济源网站优化wordpress图片轮播插件
  • 网站文章伪原创如何做宝塔安装wordpress教程
  • ppt的网站导航栏怎么做安徽建新建设工程有限公司网站