[英]Write system call writes data to disk directly?
我已经阅读了几个与此相关的问题,但我仍然有些困惑。
我的理解是写入系统调用将数据放入Buffered Cache
(该问题中提到的OS高速缓存)。 当Buffered Cache
变满时,它会被写入磁盘。
缓冲IO在此基础上进一步优化。 它在C RTL buffers
并在它们满了时发出write
系统调用以将内容移动到Buffered Cache
。 如果我使用fflush
那么与C RTL buffers
和Buffered Cache
存在的此特定文件相关的数据将被发送到磁盘。
我的理解是否正确?
如何刷新stdio缓冲区取决于您使用的标准C库。 引用Linux手册页 :
请注意,fflush()仅刷新C库提供的用户空间缓冲区。 为确保数据物理存储在磁盘上,必须刷新内核缓冲区,例如,使用sync(2)或fsync(2)。
这意味着在Linux系统上,使用fflush
或溢出缓冲区将调用write
函数。 但是操作系统可能会保留内部缓冲区,而不是实际将数据写入设备。 要确保数据真正写入设备,请同时使用fflush
和低级fsync
。
编辑:回答改写。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.