如何在C++中启用打开文件的共享?

4

我的代码:

std::ofstream m_myfile,

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

当这个C++程序运行时,我有另一个需要读取这个文件的程序。问题是该文件被C++锁定,其他程序无法读取它。我知道在编写C++程序时需要做一些事情来允许共享。请问有人能够写出我需要的代码吗?我已经搜索了很多次,但仍然无法使其工作。
有些人说,在其他程序读取文件之前关闭文件。但我无法这样做,因为文件需要保持打开状态。

当你说“文件被锁定”时,你的意思是什么?另一个程序尝试做什么(使用代码),它遇到了什么错误/异常/症状,你原本期望的是什么? - pilcrow
你是否正在尝试实现管道?你想同时读写文件,还是先写再读?对于第二个选项,你可以通过编写写入文件的程序来创建锁定文件“zlog.lck”,并在需要读取锁定文件的程序中进行存在性检查。 - erjot
为什么文件需要保持打开状态?你的目标操作系统是什么?这将会产生影响。 - ChrisBD
可能是C++:以非独占模式打开文件的重复问题。 - luke
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构造函数,它接受相同的参数。


没有这样的方法。 - user13947194

0

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

注意:您仍然可能无法获得所需的结果,因为会存在缓存和缓冲区问题,您认为已写入文件的内容实际上可能并不存在。

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


0

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


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接