当前位置:  技术问答>linux和unix

fread和read

    来源: 互联网  发布时间:2016-12-21

    本文导语:  看了下网上的帖子  说fread是缓冲文件系统,read是非缓冲文件系统 说一个是系统自动分配缓存,一个是自己分配 但是我怎么看 两个函数实现的时候 都是通过自己申请的一个数组, 然后将数据保存进数组,再通...

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

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

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

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

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

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


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

|
fread就是通过read来实现的,fread是C语言的库,而read是系统调用
但是差别在read每次读的数据是调用者要求的大小,比如调用要求读取10个字节数据,read就会读10个字节数据到数组中,而fread不一样,为了加快读的速度,fread每次都会读比要求更多的数据,然后放到缓冲区中,这样下次再读数据只需要到缓冲区中去取就可以了。

fread每次会读取一个缓冲区大小的数据,32位下一般是4096个字节,相当于调用了read(fd,buf,4096)

比如需要读取512个字节数据,分4次读取,调用read就是:
for(i=0; i

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • FILE* stream fread fwrite 的使用方法
  • 关于fread是否会阻塞的问题
  • fread函数使用出错
  • fread 和 fgets的选择?
  • 关于fopen,fread,fgets的问题,请教
  • fread函数的疑问。。
  • 请问 fread(pDataBuf,1024*1024*100,1,*pfile);可以一次读出这么多数据吗?
  • fread时总是提示段错误是什么原因?
  • 做socket程序,用recv,send这些函数好还是用fread,fwrite好?
  • 我想查看fputs(),fread(),fwrite(),fclose()函数的源代码,请问这部分的源代码在哪个RPM包里。
  • fread()函数
  • 同样的代码,换个系统编译就出事了,/usr/include/bits/stdio2.h:282: undefined reference to `__fread


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3