我有一个cpp程序,不断打印陀螺仪的读数。我想将这些值写入文件,但问题是cpp程序可以随时退出(系统断电或用户按ctrl + c等)。在读取文件时将这些值安全地写入文件的好方法是什么,而不必在之后安全地关闭文件。我想以某种方式使用bash>>操作
.
.
.
while(1)
{
printf("acc: %+5.3f", ax);
//write the printed line to file...
}
.
.
.
答案 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点可能的同步问题:
您可以使用'fflush(stdout)'调用来改进'printf'部分,但是您无法控制bash进程。
最好的解决方案是使用自己的文件输出和fprintf,然后是fflush
和sync
或类似的。后者将保证系统缓冲区也会被刷新。
在c ++世界中,您可以将输出流用于末尾带有'endl'或'flush'的文件。虽然您可能仍需要“同步”,但它们会刷新输出buffere。