To ::close() or to ::fclose()?
To ::close() or to ::fclose()?
当我们调用boost::filesystem::copy()
将文件从普通本地分区复制到 Lustre 上托管的分区时,我们有时会看到一个奇怪的问题。通常,如果我们对文件进行cp
,我们会注意到目标文件正确存在并且在cp
返回后立即可用,但是通过 boost 操作,当它返回时,文件可能全部存在或不存在(在目标)。
浏览加速代码,我看到:
if ( ::close( infile) < 0 ) sz_read = -1;
if ( ::close( outfile) < 0 ) sz_read = -1;
我想知道这是否正确,这会将文件正确刷新到目标,还是应该调用::fclose()
显式刷新然后关闭文件?我在关闭之前没有看到任何明确的::fflush()
调用,所以不确定文件是否真的被正确刷新到目标......
这取决于文件的打开方式。 如果打开时操作系统特定的::open
,然后必须用操作系统关闭它具体::close
. 如果它是用fopen
打开的,那么它必须用fclose
关闭。 如果它是用 std::fstream::open
(或fstream
的构造函数),则必须通过在对象上调用 close
来关闭它。
Boost显然正在使用低级系统调用。 在此在这种情况下,没有需要冲洗的缓冲区。 对于fclose
或 fstream::close
,关闭将自动刷新缓冲区。不需要显式刷新。
相关文章:
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- C++ Singleton - Prevent ::instance() to variable
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- Python str to C++ to Python str
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- "no matching function for call to 'Vector::Vector'"错误
- vector<vector<double>> to mxArray using memcpy
- Tensorflow c++ api undefined reference to 'tflite::D efaultErrorReporter()'
- 当覆盖存在时调用基本虚拟"binded to object"函数
- OpenGL VBO Indexing ( How to compute Index Array)
- 为什么我会" void value not ignored as it ought to be"?
- To ::close() or to ::fclose()?