写入文件,而无需关闭文件
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 点可能的同步问题:
- printf 缓冲区
- bash 缓冲区和文件打开/关闭操作。
你可以通过使用'fflush(stdout('调用来改进'printf'部分,但你无法控制bash进程。
最好的解决方案是将您自己的文件输出与 fprintf 一起使用,然后是 fflush
和 sync
或类似。后者将保证系统缓冲区也会被刷新。
在 c++ 世界中,您可以使用输出流到末尾带有"endl"或"flush"的文件。它们会刷新输出缓冲区,尽管您可能仍然需要"同步"。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到