我有一段遗留代码在调用以确定目标文件的文件大小fsync
之前发出调用。fstat
(特别是代码只是从 stat 结构中访问 st_size 。)
看过文档后,我不认为这是一个必要的电话,但我想要专家的意见。
我有一段遗留代码在调用以确定目标文件的文件大小fsync
之前发出调用。fstat
(特别是代码只是从 stat 结构中访问 st_size 。)
看过文档后,我不认为这是一个必要的电话,但我想要专家的意见。
在正确实现的文件系统上,发出调用fsync
或fdatasync
不应影响任何后续调用的结果stat
//调用fstat
。lstat
它的唯一效果应该是任何未刷新的写入,以及在 的情况下fsync
,任何修改的元数据都将提交到永久存储。stat
无论实际数据是否已进入永久存储,它的变体都可以很好地处理缓存写入。
也就是说fstat
,您正在研究的代码段中是否需要是语义问题,取决于如何使用结果fstat
。例如:
如果由于fsync
需要调用才能获得当前元数据的误解而使用它stat
,那么您可能可以将其删除。
如果它用于例如写入某种检查点数据,那么它并不是完全不相关的,尽管调用顺序可能需要颠倒 - 对于一个不断增长的文件,检查点数据需要指示文件中肯定已经完成的部分永久存储,因此调用fstat
,然后调用fsync
* 然后写入检查点信息是有意义的。
如果它被用作 I/O 绑定操作的某种 UI 进度监视器,那么显示实际提交到磁盘的数据量可能是有意义的。但是,在这种情况下,监视器的精度并不重要,因此调用顺序可能没那么重要。
那么,在您的案例中使用的结果如何?fstat
免责声明:可能存在文件系统实现,例如网络/分布式实现,其中调用fsync
可能会更新文件的本地客户端元数据缓存。在那种情况下,该fsync
调用确实可以提高代码的可靠性。但是,如果是这种情况,那么您可能会遇到比性能问题更严重的问题...