繁体   English   中英

写系统调用直接将数据写入磁盘?

[英]Write system call writes data to disk directly?

我已经阅读了几个与相关的问题,但我仍然有些困惑。

我的理解是写入系统调用将数据放入Buffered Cache (该问题中提到的OS高速缓存)。 Buffered Cache变满时,它会被写入磁盘。

缓冲IO在此基础上进一步优化。 它在C RTL buffers并在它们满了时发出write系统调用以将内容移动到Buffered Cache 如果我使用fflush那么与C RTL buffersBuffered Cache存在的此特定文件相关的数据将被发送到磁盘。

我的理解是否正确?

如何刷新stdio缓冲区取决于您使用的标准C库。 引用Linux手册页

请注意,fflush()仅刷新C库提供的用户空间缓冲区。 为确保数据物理存储在磁盘上,必须刷新内核缓冲区,例如,使用sync(2)或fsync(2)。

这意味着在Linux系统上,使用fflush或溢出缓冲区将调用write函数。 但是操作系统可能会保留内部缓冲区,而不是实际将数据写入设备。 要确保数据真正写入设备,请同时使用fflush和低级fsync

编辑:回答改写。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM