如何确保在C++中一次将整个字符串写入文件

bvpmtnay  于 2023-02-20  发布在  其他
关注(0)|答案(1)|浏览(159)

我想做一个“进程间通信”与文件在中间。生产者写消息到文件和消费者读它。

我的问题是关于制片人

假设此代码:

#include <iostream>
#include <fstream>
using namespace std;

int main() {
  // Create and open a "file in the middle" IPC
  ofstream messagefile("filename.txt");

  // Write to the file
  messagefile << "Files can be tricky, hope you are reading all of this string at once\n";

  // Close the file
  MyFile.close();
}

缓冲区刷新(在任何级别的操作系统或标准库中)是否存在将此字符串分多个部分刷新的风险?我希望确保使用者进程一次性读取整个消息。您有什么建议?
我知道消费者可以等待特定字符,如“\n”,但我的问题是关于生产者的。
先谢谢你了

g6ll5ycj

g6ll5ycj1#

如果您担心由于系统崩溃而可能丢失信息,我建议您使用ostream::flush加上某种操作系统相关的调用来真正将I/O缓冲区刷新到磁盘(如Unix系统上的sync())。
如果你只关心IPC协议(也就是说,你只想避免阅读部分消息),使用一个终止符就足够了。两个不同的独立“标记”(开始和结束)在某些情况下可能会很有用。
我猜你一次只有一个作家在活动。

相关问题