写入文件,而无需关闭文件

Write to file without having to close file

本文关键字:文件      更新时间:2023-10-16

我有一个cpp程序,它不断地打印出陀螺仪的读数。 我想将这些值写入文件,但问题是 cpp 程序可以随时退出(关闭系统电源或用户按 ctrl + c 等(。 在读取这些值时将这些值安全地写入文件而无需在读取文件之后安全关闭文件的好方法是什么。 我正在考虑以某种方式使用 bash>>运算符。

.
.
.
while(1)
{
   printf("acc: %+5.3f", ax);
   //write the printed line to file...
}
.
.
.

为了防止程序被 Ctl-c 终止,请在每次写入后刷新缓冲区:

fstream << "acc: " << ax << std::flush;

请注意,如果以 std::endl 结束输出,则会写入换行符并刷新缓冲区。

防止系统断电更难。有一些特定于操作系统的功能,如 Unix 上的 fsync(),它强制将任何内核文件缓冲区写入磁盘。但是要使用它,您需要底层的Unix文件描述符,并且没有标准方法可以从C++ fstream获取它。请参阅从 std::fstream 检索文件描述符

在这种情况下,

您有 2 点可能的同步问题:

  1. printf 缓冲区
  2. bash 缓冲区和文件打开/关闭操作。

你可以通过使用'fflush(stdout('调用来改进'printf'部分,但你无法控制bash进程。

最好的解决方案是将您自己的文件输出与 fprintf 一起使用,然后是 fflushsync 或类似。后者将保证系统缓冲区也会被刷新。

在 c++ 世界中,您可以使用输出流到末尾带有"endl"或"flush"的文件。它们会刷新输出缓冲区,尽管您可能仍然需要"同步"。