有时,当我们调用boost::filesystem::copy()将文件从普通的本地分区复制到一个托管在Lustre上的分区时,我们会发现一个奇怪的问题。通常,如果我们对文件执行cp,我们会注意到目标文件正确存在,并且在cp返回后立即可用,但是在boost操作中,当它返回时,文件可能全部存在或不存在(在目的地)。
通过boost代码,我看到:
if ( ::close( infile) < 0 ) sz_read = -1;
if ( ::close( outfile) < 0 ) sz_read = -1;我想知道这是否正确,是将文件正确地刷新到目标,还是调用::fclose()显式刷新,然后关闭该文件?在关闭之前没有看到任何显式的::fflush()调用,所以不确定文件是否被正确地刷新到目的地.
发布于 2013-09-19 10:50:31
这取决于文件是如何打开的。如果它是用操作系统特定的::open打开的,那么必须用操作系统特定的::close关闭它。如果它是用fopen打开的,那么它必须用fclose关闭。如果它是用std::fstream::open (或fstream的构造函数)打开的,那么必须通过调用对象上的close来关闭它。
很明显,Boost是在使用低级的系统调用。在这种情况下,没有需要冲洗的缓冲区。对于fclose或fstream::close,关闭将自动刷新缓冲区。不需要显式的刷新。
https://stackoverflow.com/questions/18892547
复制相似问题