如何为长时间运行的程序执行文件输出

How to do file output for a long-running program

本文关键字:程序 执行 文件 输出 运行 长时间      更新时间:2023-10-16

我写了一个模拟程序。在每个时间步骤中,它将输出块写入文件。它仍在开发中,因此有时会崩溃或被用户终止。在这种情况下,为了调试和分析,我仍然希望我的文件处于正确的状态,包含已经写入的数据。

目前,我做了以下操作:

在程序开始时,我打开非附加文件并立即关闭它,只是为了清空文件:

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重定向到您的文件,因为默认情况下该文件是没有缓冲的。