Write系统调用直接将数据写入磁盘吗?
- 论坛
- Write系统调用直接将数据写入磁盘吗?
10 浏览
Write系统调用直接将数据写入磁盘吗?
我读了一些相关问题(here),但仍然有些困惑。
我的理解是,写系统调用将数据放入缓冲缓存(在那个问题中称为操作系统缓存)。当缓冲缓存满时,数据会写入磁盘。
缓冲IO是在此基础上的进一步优化。它将数据缓存到C RTL缓冲区中,当缓冲区满时,发出写系统调用将内容移动到缓冲缓存中。如果使用fflush,则与该特定文件相关的数据会被发送到磁盘上的C RTL缓冲区和缓冲缓存。
我的理解正确吗?
匿名的
0 Comments
在使用标准C库时,stdio缓冲区的刷新方式取决于所使用的标准C库。根据Linux手册页的引用:
注意,fflush()只刷新C库提供的用户空间缓冲区。为了确保数据实际存储在磁盘上,还必须刷新内核缓冲区,例如使用sync(2)或fsync(2)。
这意味着在Linux系统上,使用fflush或溢出缓冲区将调用write函数。但操作系统可能保留内部缓冲区,并没有实际将数据写入设备。为了确保数据真正写入设备,需要同时使用fflush和底层的fsync函数。
编辑:回答重新表述。
在我之前的回答中,我混淆了它们的含义,即printf最终会导致write系统调用。
我重新表述了我的回答。