0

競合する行/文字を書き込むことなく、C++ アプリケーションと Java アプリケーションの両方で同時に同じテキスト ファイルを読み書きすることは可能ですか? 今のところ2つのJavaアプリケーションでテストしましたが、一方のプロセスがストリームを開いているが閉じていない場合でも、一方のプロセスからファイルに書き込むことができるようです。他のプロセスが待機する必要があるようにファイルをロックする方法はありますか?

4

2 に答える 2

1

はいと思います。たとえば、boost ::interprocesshttp : //www.boost.org/doc/libs/1_50_0/doc/html/interprocess.htmlファイルロックhttp://www.boost.org/doc/libs/1_50_0 /doc/html/interprocess/synchronization_mechanisms.html#interprocess.synchronization_mechanisms.file_lock

于 2012-07-11T14:29:32.120 に答える
0

同じファイルに書き込んでいる 2 つのプロセスの場合、出力バッファを行の境界でフラッシュする (つまり、改行文字シーケンスを書き込んだ後にフラッシュする) 限り、ファイルに書き込まれるデータは適切にインターリーブされます。

あるプロセスが書き込みを行っているときに別のプロセスが同じファイルから読み取りを行っている場合、読み取りが書き込みより先に進まないようにする必要があります。読み取りがファイルの終わりの状態 (またはさらに悪いことに、部分的なデータ行) になった場合、書き込みプロセスがファイルへの別のデータのチャンクの書き込みを完了するまで、読み取りプロセスを待機する必要があることがわかります。

より複雑な読み取り/書き込み制御が必要な場合は、ある種のロック メカニズムを検討する必要があります。

于 2012-07-11T19:31:15.000 に答える