我需要在f.close()之前使用os.fsync()吗?

问题描述 投票:0回答:3

“Python 的 file.flush() 到底在做什么?” 表示您应该首先

f.flush()
,然后
os.fsync(f.fileno())
以确保数据写入磁盘。
此外,“在 Python 中 close() 是否暗示着lush()?” 声称
f.close()
意味着
flush()

现在的问题是:我应该做什么

os.fsync(f.fileno())
f.close()

或者,

f.close()
是否也意味着
os.fsync()

这里有Python IO的文档,Python 文件关闭的文档,以及源代码。快速搜索“fsync”没有返回相关信息。

python io flush fsync
3个回答
4
投票

我通过跟踪测试脚本检查了自己,不,它并不意味着 fsync。 f.close() 意味着 f.flush(),因为它必须这样做。 f.flush() 写入内部 (用户空间)缓冲到关联的文件描述符,关闭文件描述符后无法写入文件描述符。然而,写入内核缓冲区并不能保证持久性,这就是 fsync 发挥作用的地方。


0
投票

我尝试过 os.fsync() 然后 f.close() 和 os.fsync() 。两者都会给出相同的立即数据写入文件的结果。尽管主电源插座突然断电并稍后重新通电,但仍会使用任一方法更新文件。

所以,当有 os.fsync() 时,f.close() 就不是必需的了。


0
投票

还要注意,每个操作系统可能有不同的效果。例如,在 Windows 上,您可以通过打开文件并在重命名后对其执行 fsync 来确保将文件重命名刷新到磁盘(它将元数据更改刷新到磁盘)。

© www.soinside.com 2019 - 2024. All rights reserved.