ofstream::close() 在 linux 上调用同步吗?
does ofstream::close() call sync on linux?
关于这个问题:Does close() call fsync() on Linux?
这个问题描述了 close() (c lib) 不在 linux 上调用同步。
这与 fstream::close() 相同吗?:
http://www.cplusplus.com/reference/fstream/fstream/close/ 建议将所有剩余字节写入文件。我观察到(罕见的)情况,我完成将 2-3KB 的块写入文件,调用 fs.close() 然后尝试打开它但打开失败。添加一个短暂的延迟 and/or 调用同步似乎可以解决这个问题。
所以我想我已经回答了我自己的问题,但是 std::fstream::close() 的描述让我感到困惑
这可能取决于库的实现,但对于常见的,它不。 ccpreference 中的内容意味着 内部流缓冲区 在 closing 之前写入任何未决字节。但它不请求 os 文件系统驱动程序强制立即写入磁盘设备。
does ofstream::close() call sync ...
它将刷新流内部的缓冲区,然后关闭它。是否调用了类似于 sync
或 fsync
的东西是未指定的。
... on linux?
这取决于实施。因此,它可能取决于您使用的标准库实现。如果你用的是开源的,你可以看看源码看看它是干什么的。
关于这个问题:Does close() call fsync() on Linux?
这个问题描述了 close() (c lib) 不在 linux 上调用同步。
这与 fstream::close() 相同吗?:
http://www.cplusplus.com/reference/fstream/fstream/close/ 建议将所有剩余字节写入文件。我观察到(罕见的)情况,我完成将 2-3KB 的块写入文件,调用 fs.close() 然后尝试打开它但打开失败。添加一个短暂的延迟 and/or 调用同步似乎可以解决这个问题。
所以我想我已经回答了我自己的问题,但是 std::fstream::close() 的描述让我感到困惑
这可能取决于库的实现,但对于常见的,它不。 ccpreference 中的内容意味着 内部流缓冲区 在 closing 之前写入任何未决字节。但它不请求 os 文件系统驱动程序强制立即写入磁盘设备。
does ofstream::close() call sync ...
它将刷新流内部的缓冲区,然后关闭它。是否调用了类似于 sync
或 fsync
的东西是未指定的。
... on linux?
这取决于实施。因此,它可能取决于您使用的标准库实现。如果你用的是开源的,你可以看看源码看看它是干什么的。