gpt4 book ai didi

c++ - C++ 流 flush() 和 FindFirstFileExw() 之间的竞争条件

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:27 25 4
gpt4 key购买 nike

我的代码看起来很接近这个:

  1. 大量写入使用正常的 C++ IO 流插入,如 steram << "foo";
  2. stream.flush();在某个时候;
  3. MSVC C API _stat() 在上面的同花顺之后立即调用。

我观察到的是 _stat()调用返回的大小不同于 stream.tellp() ,更小的尺寸。

如果我关闭 stream在调用 _stat() 之前函数它返回正确的结果。我已经踏入了_stat()它使用 FindFirstFileEx() 获取尺寸。

这是一个已知的 Win32 API 怪癖吗?

最佳答案

我假设您使用的是 Windows Vista 或更高版本。每次文件刷新到光盘时,文件大小都会在 XP 下的文件属性中更新。这在 Vista 上不再适用,因为 Hans 已经评论过文件属性,当文件的最后一个句柄关闭时,它的大小会更新。

参见 Old New Thing Blog更多细节。

您可以尝试再次打开该文件,然后再关闭它。

关于c++ - C++ 流 flush() 和 FindFirstFileExw() 之间的竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11155506/

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