Chinaunix

标题: 既然系统I/O都已经有缓存了,为什么c库的io还要弄一层缓存? [打印本页]

作者: cdsfiui    时间: 2015-01-30 13:11
标题: 既然系统I/O都已经有缓存了,为什么c库的io还要弄一层缓存?
例如,系统调用如read/write/open/close等,posix的实现都说了有缓存了。为什么标准I/O库的fread/fwrite还需要再弄一层缓存呢?
会不会多次一举了呢?

谢谢。
作者: zsszss0000    时间: 2015-01-30 13:31
fread和fwrite这些属于C库的,是为了方便程序员使用。
作者: cdsfiui    时间: 2015-01-30 15:11
zsszss0000 发表于 2015-01-30 13:31
fread和fwrite这些属于C库的,是为了方便程序员使用。


write/read/open/close使用的时候也只是包含了对应的头文件就行了啊。为什么呢?
作者: yang511yang    时间: 2015-01-30 21:31
C库的缓存相当于预读一部分数据,期望减少系统调用的次数;而IO系统的缓存是为了减少直接访问磁盘的次数,层次不同
作者: 镇水铁牛    时间: 2015-01-30 22:04
回复 4# yang511yang

解释的精辟。
os提供很多api,希望调用者能明确自己的需求,能在合适的场景应用合适的机制。
   
作者: 爻易    时间: 2015-02-01 16:12
人的消化系统就是一输入输出模型,口腔有一缓存,胃也分配了一定的缓存,管道也有一定的缓存能力!

人法地,地法天,天法道。人为万物之灵,不是没道理的!
作者: 流氓无产者    时间: 2015-02-02 09:32
我的理解是隔离平台差异
作者: cdsfiui    时间: 2015-02-02 14:39
yang511yang 发表于 2015-01-30 21:31
C库的缓存相当于预读一部分数据,期望减少系统调用的次数;而IO系统的缓存是为了减少直接访问磁盘的次数,层 ...


双层缓存,精辟的解释!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2