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 static/image/common/back.gif
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 static/image/common/back.gif
C库的缓存相当于预读一部分数据,期望减少系统调用的次数;而IO系统的缓存是为了减少直接访问磁盘的次数,层 ...

双层缓存,精辟的解释!
页: [1]
查看完整版本: 既然系统I/O都已经有缓存了,为什么c库的io还要弄一层缓存?