首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >To ::close()或to ::fclose()?

To ::close()或to ::fclose()?
EN

Stack Overflow用户
提问于 2013-09-19 10:45:47
回答 1查看 1.6K关注 0票数 2

有时,当我们调用boost::filesystem::copy()将文件从普通的本地分区复制到一个托管在Lustre上的分区时,我们会发现一个奇怪的问题。通常,如果我们对文件执行cp,我们会注意到目标文件正确存在,并且在cp返回后立即可用,但是在boost操作中,当它返回时,文件可能全部存在或不存在(在目的地)。

通过boost代码,我看到:

代码语言:javascript
复制
    if ( ::close( infile) < 0 ) sz_read = -1;
    if ( ::close( outfile) < 0 ) sz_read = -1;

我想知道这是否正确,是将文件正确地刷新到目标,还是调用::fclose()显式刷新,然后关闭该文件?在关闭之前没有看到任何显式的::fflush()调用,所以不确定文件是否被正确地刷新到目的地.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-19 10:50:31

这取决于文件是如何打开的。如果它是用操作系统特定的::open打开的,那么必须用操作系统特定的::close关闭它。如果它是用fopen打开的,那么它必须用fclose关闭。如果它是用std::fstream::open (或fstream的构造函数)打开的,那么必须通过调用对象上的close来关闭它。

很明显,Boost是在使用低级的系统调用。在这种情况下,没有需要冲洗的缓冲区。对于fclosefstream::close,关闭将自动刷新缓冲区。不需要显式的刷新。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18892547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档