gpt4 book ai didi

c - 在调用 fstat 之前调用 fsync 的任何理由

转载 作者:太空宇宙 更新时间:2023-11-04 03:57:42 25 4
gpt4 key购买 nike

我有一段遗留代码,它在调用 fstat 之前发出对 fsync 的调用以确定目标文件的文件大小。 (具体来说,代码仅访问 stat 结构之外的 st_size。)

看过文档后,我认为这不是必要的调用,但我希望得到专家的意见。

最佳答案

在正确实现的文件系统上,发出对 fsyncfdatasync 的调用不应影响任何后续 stat/ 的结果fstat/lstat 调用。它的唯一作用应该是任何未刷新的写入,在 fsync 的情况下,任何修改的元数据都将提交到永久存储。 stat 及其变体可以很好地处理缓存写入,无论实际数据是否已永久存储。

也就是说,您正在研究的代码段中是否需要fstat 是一个语义问题,取决于fstat 的结果如何使用。例如:

  • 如果由于误认为需要调用 fsync 才能使用 stat 获取当前元数据而使用它,那么您可以删除它.

  • 如果它用于例如写某种检查点数据那么它并不是完全无关紧要,尽管调用顺序可能需要颠倒——对于一个不断增长的文件,检查点数据需要指示文件的某些部分肯定已经进入永久存储,所以它会调用fstat是有意义的,然后调用fsync*,然后写入检查点信息。

  • 如果将其用作 I/O 绑定(bind)操作的某种 UI 进度监视器,则显示实际提交到磁盘的数据量可能有意义。不过,在那种情况下,监视器的精度并不重要,因此调用顺序可能无关紧要。

那么, fstat 的结果如何用于您的案例?

免责声明:可能存在文件系统实现,例如调用 fsync 的网络/分布式可能会更新文件的本地客户端元数据缓存。在那种情况下,fsync 调用确实可以提高代码的可靠性。但是,如果是这种情况,那么您的问题可能比一点性能问题更严重...

关于c - 在调用 fstat 之前调用 fsync 的任何理由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14899435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com