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

问题描述 投票:0回答:1

我想用中间的文件进行“进程间通信”。生产者将消息写入文件,消费者读取它。

我的问题是关于制作人的。

假设这段代码:

#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();
} 

缓冲区刷新(在操作系统或标准库的任何级别)是否会在多个部分中刷新该字符串? 我想确保消费者进程一次性读取整个消息。你有什么建议?

我知道消费者可以等待特定的字符,例如“ ”,但我的问题是关于制片人的。

提前非常感谢您

c++ ostream
1个回答
2
投票

如果您担心由于系统崩溃而可能丢失信息,我建议您使用

ostream::flush
加上某种依赖于操作系统的调用来真正将 I/O 缓冲区刷新到磁盘(例如
sync()
在 Unix 系统上)。

如果您只是关心 IPC 协议(即,您只是想避免读取部分消息),那么使用终止符就足够了。在某些情况下,两个不同单独的“标记”(开始和结束)可能很有用。

我假设您一次只有一位活跃的作家。

© www.soinside.com 2019 - 2024. All rights reserved.