【发布时间】:2020-06-17 14:50:06
【问题描述】:
回复这个问题:Does close() call fsync() on Linux?
这个问题描述了 close() (c lib) 在 linux 上不调用同步。
fstream::close() 也一样吗?:
http://www.cplusplus.com/reference/fstream/fstream/close/ 建议将所有剩余字节写入文件。我观察到(罕见的)情况,我完成将 2-3KB 的块写入文件,调用 fs.close() 然后尝试打开它并且打开失败。添加一个短暂的延迟和/或调用同步似乎可以解决这个问题。
所以我想我已经回答了我自己的问题,但是 std::fstream::close() 描述让我感到困惑
【问题讨论】:
-
AFAIK
sync不应该影响这一点。我认为您应该在别处寻找问题的原因。 -
打开失败是什么意思?失败了怎么办?
fsync与将数据刷新到文件无关,但会导致将数据写入底层设备。 -
@StaceyGirl 失败,如:
std::ifstream ifs {filename, in | binary}; if (!ifs) {...fail...}我在关闭它并写入所有数据后立即运行它。 -
@code_fodder 它不应该失败。无论你在做什么,它都与
sync、fsync等无关。除非它涉及一些故障的网络存储或在 Linux 子系统下运行 Windows 或类似的东西。 -
@StaceyGirl 我在 ubuntu VM 上看到过一次,但大多数情况下我看到它在 jenkins 测试环境中的 linux 上运行。但它很少见。我真正在做的就是写入一个 ofstream 并使用 ifstream 回读——简单的东西。下面的答案表明它可能是一个问题......