无需关闭文件即可写入文件

时间:2018-01-18 00:21:20

标签: c++ file

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

.
.
.
while(1)
{

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

}
.
.
.

2 个答案:

答案 0 :(得分:0)

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

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

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

防止系统断电更难。在Unix上有一些特定于操作系统的函数,如fsync(),它强制将任何内核文件缓冲区写入磁盘。但是要使用它,你需要底层的Unix文件描述符,并且没有标准的方法从C ++ fstream获得它。见Retrieving file descriptor from a std::fstream

答案 1 :(得分:0)

在这种情况下,您有2点可能的同步问题:

  1. printf buffers
  2. bash缓冲区和文件打开/关闭操作。
  3. 您可以使用'fflush(stdout)'调用来改进'printf'部分,但是您无法控制bash进程。

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

    在c ++世界中,您可以将输出流用于末尾带有'endl'或'flush'的文件。虽然您可能仍需要“同步”,但它们会刷新输出buffere。