如何为长时间运行的程序执行文件输出
How to do file output for a long-running program
我写了一个模拟程序。在每个时间步骤中,它将输出块写入文件。它仍在开发中,因此有时会崩溃或被用户终止。在这种情况下,为了调试和分析,我仍然希望我的文件处于正确的状态,包含已经写入的数据。
目前,我做了以下操作:
在程序开始时,我打开非附加文件并立即关闭它,只是为了清空文件:
file.open(fname, std::ios::binary);
file.close();
在每个时间步上,我首先打开文件追加,写入数据,然后关闭文件:
file.open(fname, std::ios::binary | std::ios::app);
... // data is written here
file.close();
这是解决问题的好方法吗?或者你会推荐不同的方法吗?
不,那个方法浪费了很多时间。
你试过写信号处理程序来正确地清理吗?您可以处理大多数事情,例如用户按下Control-C并在退出之前关闭文件。
另一个想法是关闭缓冲。要做到这一点,最简单的方法可能是将STDERR重定向到您的文件,因为默认情况下该文件是没有缓冲的。
相关文章:
- 如何在程序执行时查看Valgrind Massif输出(或其他堆分析器)?
- 如何进行程序执行检查
- 捕获异常后如何退出程序执行
- 在程序执行期间从标准输出重定向到自定义流
- 为什么 C++ openMP 程序执行时间更长
- 从Qt应用程序执行MSI文件
- 应用程序执行器 vs lpsz用户名 ADsOpenObject.
- C++:程序执行时"Not Responding"
- JIT 编译器及其在 C++ 前面加快 .NET 中程序执行速度的好处
- 如何让 c++ 程序执行以响应文件打开
- 防止从其他程序执行库中的函数
- Visual样本存储过程从C 程序执行
- 程序执行因细分故障而停止:11
- 注销侏儒会话时如何从Qt应用程序执行"confirm" gnome会话管理器的对话框(不使用QSessionManager)
- 程序执行基本操作所花费的总时间
- 停止直接执行主应用程序并从第二个应用程序执行它
- 引用变量在下一行程序执行后显示未找到的行为
- C 可以在程序执行过程中移动内存映射的文件(boost :: intercecess)移动
- glLinkProgram() 在程序执行中未定义,即使 glew 报告它存在
- 标准 C++ 程序执行期间的函数调用