4

Windows C/C++ API を使用して、任意のサイズのファイルを作成したいと考えています。32 ビットの仮想アドレス メモリ空間を持つ Windows XP サービス パック 2 を使用しています。私はCreateFileに精通しています。

ただし、CreateFile にはサイズ引数がありません。サイズ引数を渡したい理由は、ユーザーが所定のサイズのデータ​​構造にアクセスできるようにするメモリ マッピング ファイルを作成できるようにするためです。任意の所定のサイズのファイルを作成できる適切な Windows C/C++ API 関数を教えてください。ありがとうございました

4

5 に答える 5

8

いつもCreateFileのようSetFilePointerExに、希望のサイズに変更してから、を呼び出しますSetEndOfFile

于 2011-01-20T20:56:09.670 に答える
2

ファイルは必要ありません。MSDNCreateFileMapping関数ページから、ページファイルをメモリ マップ ファイルのバッキングとして使用できます。

hFile が INVALID_HANDLE_VALUE の場合、呼び出しプロセスは、dwMaximumSizeHigh パラメーターと dwMaximumSizeLow パラメーターでファイル マッピング オブジェクトのサイズも指定する必要があります。このシナリオでは、CreateFileMapping は、ファイル システム内のファイルではなく、システム ページング ファイルによってサポートされる、指定されたサイズのファイル マッピング オブジェクトを作成します。

を使用して、引き続きマッピング オブジェクトを共有できますDuplicateHandle

于 2011-01-20T21:03:35.320 に答える
2

UNIX でこれを行うには、(RequiredFileSize - 1) を探してから 1 バイトを書き込みます。バイトの値は何でもかまいませんが、ゼロが当然の選択です。

于 2011-01-20T21:37:03.507 に答える
1

コメントによると、実際にはクロスプラットフォームソリューションが必要なので、BoostInterprocessライブラリを確認してください。クロスプラットフォームの共有メモリ機能などを提供します

于 2011-01-20T22:10:55.660 に答える