当我们致电close(<fd>)
时,会自动执行fsync()
同步到物理媒体吗?
答案 0 :(得分:10)
没有。调用close()
不保证内容在磁盘上,因为操作系统可能已推迟写入。
作为旁注,请务必检查close()
的返回值。它将告诉您到目前为止的任何延迟错误。如果您想确保磁盘上的内容,请始终调用fsync()
并检查其返回值。
要记住的一件事是支持商店是什么。有些设备可能会执行内部写入延迟,并且在某些情况下内容可能会丢失(尽管较新的存储介质设备通常使用超级电容来防止这种情况,或者禁用此功能的方法)。
答案 1 :(得分:2)
没有
成功关闭并不能保证数据已经存在 成功保存到磁盘,因为内核推迟写入。它 在关闭流时,文件系统刷新缓冲区并不常见。如果您需要确保数据是 物理存储使用fsync(2)。 (这取决于此时的磁盘硬件。)
答案 2 :(得分:0)
来自man 2 close
:
成功关闭并不能保证数据已经存在 成功保存到磁盘,因为内核推迟写入。它不是 常见的是文件系统在流时刷新缓冲区 关闭。如果您需要确保数据是物理存储使用 FSYNC(2)。 (这取决于此时的磁盘硬件。)
要回答您的问题,否,close()
不保证fsync()
close
仅关闭进程的文件描述符,并删除与该进程关联的所有记录锁。