Megosztás a következőn keresztül:


Fájlleképezési objektum létrehozása

A fájl leképezésének első lépése a fájl megnyitása a CreateFile függvény meghívásával. Annak érdekében, hogy más folyamatok ne tudjanak írni a leképezett fájlrészbe, nyissa meg a fájlt kizárólagos hozzáféréssel. Ezenkívül a fájlkezelőnek nyitva kell maradnia, amíg a folyamatnak már nincs szüksége a fájlleképezési objektumra. A kizárólagos hozzáférés egyszerű módja, ha a CreateFile fdwShareMode paraméterében nullát határoz meg. A CreateFile által visszaadott leírót a CreateFileMapping függvény használja egy fájlleképezési objektum létrehozásához.

A CreateFileMapping függvény egy leírót ad vissza a fájlleképezési objektumnak. Ezt a leírót akkor használja a rendszer, amikor fájlnézetet hoz létre, hogy hozzáférhessen a megosztott memóriához. Amikor meghívja CreateFileMapping, meg kell adnia egy objektumnevet, a fájlból leképezendő bájtok számát, valamint a leképezett memória olvasási/írási engedélyét. Az első folyamat, amely meghívja CreateFileMapping létrehozza a fájlleképezési objektumot. Azok a folyamatok, amelyek a CreateFileMapping-t hívják meg egy meglévő objektumhoz, egy leírót kapnak a meglévő objektumhoz. A GetLastError függvény meghívásával megállapíthatja, hogy a CreateFileMapping sikeres hívása hozta-e létre vagy nyitotta-e meg a fájlleképezési objektumot. GetLastError visszaadja NO_ERROR a létrehozási folyamatnak, és ERROR_ALREADY_EXISTS a későbbi folyamatoknak.

A CreateFileMapping függvény meghiúsul, ha a hozzáférési jelzők ütköznek a CreateFile függvény megnyitásakor megadottakkal. Például a fájl olvasásához és írásához:

  • Adja meg a GENERIC_READ és GENERIC_WRITE értékeket CreateFilefdwAccess paraméterében.
  • Adja meg a PAGE_READWRITE értéket a CreateFileMappingfdwProtect paraméterében.

A fájlleképezési objektum létrehozása nem véglegesíti a fizikai memóriát, csak lefoglalja.

Fájlleképezés mérete

A fájlleképezési objektum mérete független a leképezett fájl méretétől. Ha azonban a fájlleképezési objektum nagyobb a fájlnál, a rendszer kibontja a fájlt, mielőtt CreateFileMapping visszatér. Ha a fájlleképezési objektum kisebb, mint a fájl, a rendszer csak a megadott számú bájtot képez le a fájlból.

A dwMaximumSizeHigh és dwMaximumSizeLowCreateFileMapping paraméterével megadhatja a fájlból leképezendő bájtok számát:

  • Ha nem szeretné módosítani a fájl méretét (például írásvédett fájlok leképezésekor), hívja meg CreateFileMapping, és adjon meg nullát dwMaximumSizeHigh és dwMaximumSizeLow. Ezzel létrehoz egy fájlleképezési objektumot, amely pontosan megegyezik a fájl méretével. Ellenkező esetben ki kell számítania vagy meg kell becsülnie a kész fájl méretét, mert a fájlleképezési objektumok statikus méretűek; létrehozása után a méretük nem növelhető vagy csökkenthető. Ha ilyen módon próbál leképezni egy nulla hosszúságú fájlt, az ERROR_FILE_INVALIDhibakóddal meghiúsul. A programoknak tesztelniük kell a fájlokat, hogy azok hosszúsága nulla-e, és el kell utasítaniuk az ilyen fájlokat.

  • A névvel ellátott fájl által támogatott fájlleképezési objektumok méretét a lemezterület korlátozza. A fájlnézet mérete a nem fenntartás nélküli virtuális memória legnagyobb, egybefüggő blokkjára korlátozódik. Ez legfeljebb 2 GB mínusz a folyamat által lefoglalt virtuális memória.

A kiválasztott fájlleképezési objektum mérete határozza meg, hogy a memórialeképezéssel milyen messzire "látható" a fájl. Ha 500 Kb méretű fájlleképezési objektumot hoz létre, a fájl méretétől függetlenül csak az első 500 Kb-os fájlhoz férhet hozzá. Mivel nincsen szükség rendszererőforrásokra egy nagyobb fájlleképezési objektum létrehozásához, hozzon létre egy olyan fájlleképezési objektumot, amely a fájl mérettel rendelkezik (állítsa be a dwMaximumSizeHigh és dwMaximumSizeLow paramétereit a CreateFileMapping függvénynél nullára), még akkor is, ha nem számítasz a teljes fájl megtekintésére. A rendszererőforrások költségei a nézetek létrehozásakor és elérésekor jelentkeznek.

Megtekintheti a fájl azon részét, amely nem a fájl elején kezdődik. További információért lásd: Nézet létrehozása a fájlon belül.

Fájlnézet létrehozása

Nézet készítése egy fájlban