提问者:小点点

ofStream::Close()是否调用Linux上的同步?


关于这个问题:在Linux上close()调用fsync()吗?

这个问题描述了close()(c lib)在Linux上不调用sync。

fStream::Close()也是这样吗?:

http://www.cplusplus.com/reference/fstream/fstream/close/建议is将所有剩余字节写入文件。 我观察到(很少)这样的情况:我将一个2-3KB的块写到一个文件中,调用fs.close(),然后尝试打开它,但打开失败。 添加短延迟和/或调用sync似乎可以解决这一问题。

所以我想我已经回答了我自己的问题,但是std::fstream::close()描述让我感到困惑


共2个答案

匿名用户

它可能取决于库实现,但对于常见的库,它不是这样做的。 在ccpreference中写入的内容意味着内部流缓冲区在关闭之前写入任何挂起的字节。 但它不会请求os文件系统驱动程序强制立即写入磁盘设备。

匿名用户

OfStream::Close()调用同步。。。

它将刷新流内部的缓冲区,然后关闭它。 是否调用类似于syncfsync的对象是未指定的。

。。。在Linux上?

这取决于执行情况。 因此,这可能取决于您使用的标准库实现。 如果您使用的是开源软件,您可以查看源代码,看看它是做什么的。