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

2024-01-01

我读过几个问题(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 buffersBuffered 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(使用前将#替换为@)

Write系统调用直接将数据写入磁盘? 的相关文章

随机推荐