1

我正在使用 VC++ 生成一个文本文件并连续写入(通过 fstream)数据。我有另一个应用程序2(不是 C++),它访问 C++ 附加的同一个文件。在应用程序2 访问该文件的瞬间,来自 C++ 程序的新数据无法写入该文件。似乎来自 c++ 的新数据进入了某个临时文件。当 application2 关闭文件时,新数据会更新到文件中。我希望将数据实时写入文件并由application2同时读取。我应该在 c++ 中做什么才能使新数据出现在 application2 打开的文件中?

C++ 方面:

int realTimeValues  // this variable is updated continuously

FILE * pFileTXT; 

while(1)
{
 pFileTXT = fopen ("realTimeData.txt","a"); // Opening file in append mode
 fprintf (pFileTXT, "%d\n",realTimeValues);   // saving values to file
 fclose (pFileTXT)                            // Closing the file
}

在 application2 方面,我不知道它是如何打开这个文件的。该应用程序是通用实时软件示波器。在菜单中有一个选项“从文件中读取”

4

1 回答 1

0

啊。有很多事情在起作用:

  1. 默认情况下,fprintf 输出可能会缓冲在私有 ram 缓冲区中。此缓冲区仅在需要时或在您执行 fclose 时刷新。如果您想强制输出数据,您可以调用 setbuf(阅读文档)或在每个 fprintf 之后显式调用 fflush。
  2. 我不知道 fopen 是否允许同时阅读。考虑到缓冲行为,可能不会。如果您想要读/写共享,您应该查看文档以查看是否有显式模式参数来启用此功能。
  3. 不幸的是,这只涵盖了您可以控制的部分。如果阅读器(您无法控制的应用程序)不支持共享阅读,那么您就不走运了。
于 2012-12-12T05:56:25.273 回答