2

私のファイル (sample.txt) には 10 文字あります。ファイルを書き込みモードで開き、createfilemapping("mymapping"). 次に getchar で処理を保留します。次に、以下を行う別のプロセスを開きました

openfilemapping("mymapping"),
char*k =  (char*)mapviewoffile 

これで、sample.txt の値にアクセスして、k 経由で変更できます。ただし、別の 10 文字のストリップをファイルに挿入/追加する方法。

4

1 に答える 1

3

共有メモリ マッピングは、作成時にサイズが固定されます。CreateFileMappingより大きなマッピング サイズで再度呼び出す必要があります。これにより、ファイルが自動的に拡張され、その時点でMapViewOfFile再び必要なデータを書き込むことができます。ファイル マッピングが破棄されるようにすべてのハンドルとマッピングを最初に閉じない限り、ファイル マッピングの名前を変更する必要があることに注意してください。

余談ですが、ディスク ファイルに基づく名前付きファイル マッピングを使用することは、通常ではありません (もちろん、違法ではありません)。通常、実際のファイルをマッピングする場合はNULL、 のlpNameパラメーターに渡しますCreateFileMapping。バッキング ファイルなしで共有メモリ マッピングを作成する場合は、名前を渡します。つまり、共有メモリ セグメントの名前になりますhFileNULLlpName

于 2011-02-15T12:08:10.400 に答える