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

共有は OS レベルで制御されます。そのため、OS の API を調べて、読み書き共有をオンにする方法を理解する必要があります。

注: キャッシュとバッファリングの問題が発生し、ファイルに書き込まれたと思われるものが実際には存在しない可能性があるため、おそらく必要な結果が得られない可能性があります。

2 つのプロセス間で情報を共有する場合は、名前付きパイプまたはソケットを使用します。どちらもほぼすべての OS で利用できます。

于 2010-09-28T15:21:56.523 に答える
0

filebuf::sh_writeファイルを開くときに使用します。

于 2010-09-28T15:23:07.293 に答える
0

他のオプションは、ソケットを使用することです。このスタック オーバーフローの質問を確認してください:複数のプロセスがリッスン ソケットを共有する方法はありますか?

于 2010-09-28T15:47:12.080 に答える