close()在Linux上调用fsync()吗?

当我们调用close(<fd>) ,它是否自动执行fsync()以同步到物理介质?

Solutions Collecting From Web of "close()在Linux上调用fsync()吗?"

它不是。 调用close()不保证内容在磁盘上,因为操作系统可能推迟了写操作。

作为一个方面说明,总是检查close()的返回值。 它会让你知道到目前为止的任何延期错误。 如果你想确保内容在磁盘上,总是调用fsync()并检查它的返回值。

有一点要记住的是后台存储是什么。 有些设备可能会进行内部写入推迟,并且在某些情况下内容可能会丢失(虽然较新的存储介质设备通常使用超级电容来防止这种情况,或者禁用此功能的方法)。

man 2 close

成功关闭并不能保证数据已成功保存到磁盘,因为内核推迟写入。 当流关闭时,文件系统刷新缓冲区并不常见。 如果您需要确保数据是物理存储的,请使用fsync(2)。 (这点取决于磁盘硬件。)

要回答你的问题, close()不保证fsync()

close仅关闭进程的文件描述符,并删除与该进程相关的任何记录锁。

没有。

man 2 close

成功关闭并不能保证数据已成功保存到磁盘,因为内核推迟写入。 当流关闭时,文件系统刷新缓冲区并不常见。 如果您需要确保数据是物理存储的,请使用fsync(2)。 (这点取决于硬盘硬件。)