Membuat Objek Pemetaan File

Langkah pertama dalam memetakan file adalah membuka file dengan memanggil fungsi CreateFile . Untuk memastikan bahwa proses lain tidak dapat menulis ke bagian file yang dipetakan, Anda harus membuka file dengan akses eksklusif. Selain itu, handel file harus tetap terbuka sampai proses tidak lagi memerlukan objek pemetaan file. Cara mudah untuk mendapatkan akses eksklusif adalah dengan menentukan nol dalam parameter fdwShareMode dari CreateFile. Handel yang dikembalikan oleh CreateFile digunakan oleh fungsi CreateFileMapping untuk membuat objek pemetaan file.

Fungsi CreateFileMapping mengembalikan handel ke objek pemetaan file. Handel ini akan digunakan saat membuat tampilan file sehingga Anda dapat mengakses memori bersama. Saat Anda memanggil CreateFileMapping, Anda menentukan nama objek, jumlah byte yang akan dipetakan dari file, dan izin baca/tulis untuk memori yang dipetakan. Proses pertama yang memanggil CreateFileMapping membuat objek pemetaan file. Proses yang memanggil CreateFileMapping untuk objek yang ada menerima handel ke objek yang ada. Anda dapat mengetahui apakah panggilan berhasil ke CreateFileMapping dibuat atau membuka objek pemetaan file dengan memanggil fungsi GetLastError . GetLastError mengembalikan NO_ERROR ke proses pembuatan dan ERROR_ALREADY_EXISTS ke proses berikutnya.

Fungsi CreateFileMapping gagal jika bendera akses bertentangan dengan yang ditentukan saat fungsi CreateFile membuka file. Misalnya, untuk membaca dan menulis ke file:

  • Tentukan nilai GENERIC_READ dan GENERIC_WRITE dalam parameter fdwAccess dari CreateFile.
  • Tentukan nilai PAGE_READWRITE dalam parameter fdwProtect dari CreateFileMapping.

Membuat objek pemetaan file tidak menerapkan memori fisik, objek hanya mencadangkannya.

Ukuran Pemetaan File

Ukuran objek pemetaan file tidak bergantung pada ukuran file yang sedang dipetakan. Namun, jika objek pemetaan file lebih besar dari file, sistem memperluas file sebelum CreateFileMapping kembali. Jika objek pemetaan file lebih kecil dari file, sistem hanya memetakan jumlah byte yang ditentukan dari file.

Parameter dwMaximumSizeHigh dan dwMaximumSizeLow dari CreateFileMapping memungkinkan Anda menentukan jumlah byte yang akan dipetakan dari file:

  • Ketika Anda tidak ingin ukuran file berubah (misalnya, saat memetakan file baca-saja), panggil CreateFileMapping dan tentukan nol untuk dwMaximumSizeHigh dan dwMaximumSizeLow. Melakukan ini membuat objek pemetaan file yang ukurannya sama persis dengan file. Jika tidak, Anda harus menghitung atau memperkirakan ukuran file yang sudah selesai karena objek pemetaan file berukuran statis; setelah dibuat, ukurannya tidak dapat ditingkatkan atau dikurangi. Upaya untuk memetakan file dengan panjang nol dengan cara ini gagal dengan kode kesalahan ERROR_FILE_INVALID. Program harus menguji file dengan panjang nol dan menolak file tersebut.

  • Ukuran objek pemetaan file yang didukung oleh file bernama dibatasi oleh ruang disk. Ukuran tampilan file terbatas pada blok terbesar yang tersedia berdampingan dari memori virtual yang tidak dilayani. Ini paling banyak 2 GB dikurangi memori virtual yang sudah dicadangkan oleh proses.

Ukuran objek pemetaan file yang Anda pilih mengontrol seberapa jauh file yang dapat Anda "lihat" dengan pemetaan memori. Jika Anda membuat objek pemetaan file berukuran 500 Kb, Anda hanya memiliki akses ke 500 Kb pertama file, terlepas dari ukuran file. Karena anda tidak dikenakan biaya sumber daya sistem untuk membuat objek pemetaan file yang lebih besar, buat objek pemetaan file yang merupakan ukuran file (atur parameter dwMaximumSizeHigh dan dwMaximumSizeLow dari CreateFileMapping keduanya ke nol) bahkan jika Anda tidak berharap untuk melihat seluruh file. Biaya dalam sumber daya sistem datang dalam membuat tampilan dan mengaksesnya.

Anda dapat melihat sebagian file yang tidak dimulai di awal file. Untuk informasi selengkapnya, lihat Membuat Tampilan Dalam File.

Membuat Tampilan File

Membuat Tampilan Dalam File