+ -
当前位置:首页 → 问答吧 → fread和read

fread和read

时间:2011-08-09

来源:互联网

看了下网上的帖子 
说fread是缓冲文件系统,read是非缓冲文件系统

说一个是系统自动分配缓存,一个是自己分配

但是我怎么看 两个函数实现的时候 都是通过自己申请的一个数组,

然后将数据保存进数组,再通过write,fwrite将内容写入新文件中去!

那不都是自己分配,申请的内存嘛?怎么还存在上面说的差别?

帮忙分析下上面的两个性质 具体是什么意思?!

作者: DestinyHot   发布时间: 2011-08-09

没看过源码,不敢肯定,不过从概念来看:
read/write调用一次即执行一次系统调用。可用于所有文件,包括设备/管道。
fread/fwrite会有缓冲,也就是有预读和延迟写,以减少系统调用次数。适用于常规文件。
例如,read(100)就是实际从文件中读100字节,而fread(100)则可能读1000字节,然后返回100个,下次再读就直接用了。write类似。
如果有同学分析代码的话,我也学习一下,呵呵。

作者: gaosifuti   发布时间: 2011-08-09

引用 1 楼 gaosifuti 的回复:

没看过源码,不敢肯定,不过从概念来看:
read/write调用一次即执行一次系统调用。可用于所有文件,包括设备/管道。
fread/fwrite会有缓冲,也就是有预读和延迟写,以减少系统调用次数。适用于常规文件。
例如,read(100)就是实际从文件中读100字节,而fread(100)则可能读1000字节,然后返回100个,下次再读就直接用了。write类似。
如果有同学分析代码的……


就是fread 系统先申请一段内存,一次性将数据全部读出来,然后根据定义的数组缓存大小限制来再向文件中写数据,系统调用一次,以后每次都是从缓存中取数据!
read每次都是调用系统调用,而且只能读出自己定义的数组大小字节的数据,并写入!?

哪位什么不知接用自己申请的缓存 直接fwrite,还要浪费一次 再存入定义的数组中?

哪里理解错了,求指导!

作者: DestinyHot   发布时间: 2011-08-09