我读过几个问题(here https://stackoverflow.com/questions/1450551/buffered-i-o-vs-unbuffered-io)与此相关,但我仍然有些困惑。
我的理解是 write 系统调用将数据放入Buffered Cache
(该问题中提到的操作系统缓存)。当。。。的时候Buffered Cache
满了就会写入磁盘。
Buffered IO 是在此基础上进一步优化。它缓存在C RTL buffers
当他们吃饱时write
发出系统调用以将内容移动到Buffered Cache
。如果我使用fflush
然后与该特定文件相关的数据存在于C RTL buffers
也Buffered Cache
被发送到磁盘。
我的理解正确吗?
stdio 缓冲区的刷新方式取决于您使用的标准 C 库。引用自Linux 手册页 http://linux.die.net/man/3/fflush:
请注意,fflush() 仅刷新 C 库提供的用户空间缓冲区。
为了确保数据物理存储在磁盘上,内核缓冲区必须
也可以刷新,例如使用sync(2)或fsync(2)。
这意味着在 Linux 系统上,使用fflush
或溢出缓冲区将调用write
功能。但操作系统可能会保留内部缓冲区,而不是实际将数据写入设备。为了确保数据真正写入设备,请使用fflush
和低级fsync
.
Edit:答案改写。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)