当前位置: 技术问答>linux和unix
fread和read
来源: 互联网 发布时间:2016-12-21
本文导语: 看了下网上的帖子 说fread是缓冲文件系统,read是非缓冲文件系统 说一个是系统自动分配缓存,一个是自己分配 但是我怎么看 两个函数实现的时候 都是通过自己申请的一个数组, 然后将数据保存进数组,再通...
看了下网上的帖子
说fread是缓冲文件系统,read是非缓冲文件系统
说一个是系统自动分配缓存,一个是自己分配
但是我怎么看 两个函数实现的时候 都是通过自己申请的一个数组,
然后将数据保存进数组,再通过write,fwrite将内容写入新文件中去!
那不都是自己分配,申请的内存嘛?怎么还存在上面说的差别?
帮忙分析下上面的两个性质 具体是什么意思?!
说fread是缓冲文件系统,read是非缓冲文件系统
说一个是系统自动分配缓存,一个是自己分配
但是我怎么看 两个函数实现的时候 都是通过自己申请的一个数组,
然后将数据保存进数组,再通过write,fwrite将内容写入新文件中去!
那不都是自己分配,申请的内存嘛?怎么还存在上面说的差别?
帮忙分析下上面的两个性质 具体是什么意思?!
|
没看过源码,不敢肯定,不过从概念来看:
read/write调用一次即执行一次系统调用。可用于所有文件,包括设备/管道。
fread/fwrite会有缓冲,也就是有预读和延迟写,以减少系统调用次数。适用于常规文件。
例如,read(100)就是实际从文件中读100字节,而fread(100)则可能读1000字节,然后返回100个,下次再读就直接用了。write类似。
如果有同学分析代码的话,我也学习一下,呵呵。
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
但是差别在read每次读的数据是调用者要求的大小,比如调用要求读取10个字节数据,read就会读10个字节数据到数组中,而fread不一样,为了加快读的速度,fread每次都会读比要求更多的数据,然后放到缓冲区中,这样下次再读数据只需要到缓冲区中去取就可以了。
fread每次会读取一个缓冲区大小的数据,32位下一般是4096个字节,相当于调用了read(fd,buf,4096)
比如需要读取512个字节数据,分4次读取,调用read就是:
for(i=0; i