4

我的代码:

std::ofstream m_myfile,

m_myfile.open ("zLog.txt");
m_myfile << "Writing this to a file " << " and this " << endl;

当这个 C++ 程序运行时,我有另一个程序需要读取这个文件。问题是该文件被 C++ 锁定,我无法从其他程序中读取它。我知道我必须在允许共享的 C++ 程序中以某种方式编写代码。有人可以准确地写出我需要的东西。我已经用谷歌搜索了它,但仍然无法让它工作。

有人说在其他程序读取文件之前关闭文件。我不能这样做,文件需要打开。

谢谢

4

4 回答 4

1

您需要在启用共享的情况下打开文件。使用该open方法的以下重载:

void open(const char *szName, int nMode = ios::out, int nProt = filebuf::openprot);

并将适当的共享模式传递为nProt

  • filebuf::sh_compat: 兼容共享模式
  • filebuf::sh_none:独占模式;没有分享
  • filebuf::sh_read: 允许读取共享
  • filebuf::sh_write: 允许写入共享

还有一个ofstream构造函数的重载,它采用相同的参数。

于 2010-09-28T15:21:11.503 回答
0

共享将在操作系统级别进行控制。因此,您需要查看您的操作系统的 API 并弄清楚如何打开读写共享。

注意:您仍然可能不会得到您想要的结果,因为会有缓存和缓冲问题,而且您认为写入文件的内容可能实际上并不存在。

如果要在两个进程之间共享信息,请使用命名管道或套接字。几乎每个操作系统都可以使用这两者。

于 2010-09-28T15:21:56.523 回答
0

filebuf::sh_write打开文件时使用。

于 2010-09-28T15:23:07.293 回答
0

其他选择是使用套接字。看看这个stackoverflow问题:有没有办法让多个进程共享一个监听套接字?

于 2010-09-28T15:47:12.080 回答