Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Vytvoření objektu mapování souborů ve Windows zahrnuje otevření souboru pomocí funkce CreateFile . Tento proces umožňuje namapovat obsah souboru přímo do paměti pro efektivní přístup a manipulaci. Pokud chcete zajistit, aby ostatní procesy nemohly zapisovat do části namapovaného souboru, měli byste soubor otevřít s výhradním přístupem. Kromě toho by popisovač souboru měl zůstat otevřený, dokud proces už nepotřebuje objekt mapování souboru. Snadný způsob, jak získat výhradní přístup, je zadat nula v fdwShareMode parametr CreateFile. Funkce CreateFileMapping používá popisovač vrácený CreateFile k vytvoření objektu souborového mapování.
Funkce CreateFileMapping vrátí popisovač objektu mapování souboru. Tento popisovač se použije při vytváření zobrazení souboru, aby bylo možné mít přístup ke sdílené paměti. Při volání CreateFileMapping zadáte název objektu, počet bajtů, které se mají namapovat ze souboru, a oprávnění ke čtení a zápisu pro mapovanou paměť. První proces, který volá CreateFileMapping , vytvoří objekt mapování souboru. Procesy volající CreateFileMapping pro existující objekt obdrží popisovač k tomuto objektu. Můžete zjistit, zda úspěšné volání CreateFileMapping vytvořil nebo otevřel objekt mapování souboru voláním GetLastError funkce. Funkce GetLastError vrátí NO_ERROR procesu vytváření a ERROR_ALREADY_EXISTS následným procesům.
Funkce CreateFileMapping selže, pokud jsou příznaky přístupu v konfliktu s příznaky zadanými při otevření souboru funkce CreateFile . Například čtení a zápis do souboru:
- Zadejte hodnoty GENERIC_READ a GENERIC_WRITE v parametru fdwAccess funkce CreateFile.
- Zadejte hodnotu PAGE_READWRITE v parametru fdwProtectcreateFileMapping.
Vytvoření objektu mapování souboru neobsahuje fyzickou paměť, pouze ji rezervuje.
Velikost mapování souborů
Velikost objektu mapování souboru je nezávislá na velikosti souboru, který se mapuje. Pokud je však objekt mapování souboru větší než soubor, systém soubor rozšíří před tím, než CreateFileMapping vrátí. Pokud je objekt mapování souboru menší než soubor, systém mapuje pouze zadaný počet bajtů ze souboru.
DwMaximumSizeHigh a dwMaximumSizeLow parametry CreateFileMapping umožňují určit počet bajtů, které mají být mapovány ze souboru:
Pokud nechcete, aby se velikost souboru změnila (například při mapování souborů jen pro čtení), zavolejte CreateFileMapping a zadejte nulu pro dwMaximumSizeHigh a dwMaximumSizeLow. Tímto způsobem se vytvoří objekt mapování souborů, který má přesně stejnou velikost jako soubor. V opačném případě je nutné vypočítat nebo odhadnout velikost dokončeného souboru, protože objekty mapování souborů jsou statické velikosti; po vytvoření nelze jejich velikost zvětšit ani zmenšit. Pokus o mapování souboru s délkou nuly tímto způsobem selže s kódem chyby ERROR_FILE_INVALID. Programy by měly testovat soubory s délkou nuly a takové soubory odmítnout.
Velikost objektu mapování souboru, který je podporován pojmenovaným souborem, je omezena místem na disku. Velikost zobrazení souborů je omezena na největší dostupný souvislý blok nereservované virtuální paměti.
Velikost objektu mapování souboru, který vyberete, určuje, jak daleko do souboru můžete "zobrazit" s mapováním paměti. Pokud vytvoříte objekt mapování souborů o velikosti 500 kB, budete mít přístup pouze k prvních 500 kB souboru bez ohledu na velikost souboru. Protože k vytvoření většího objektu mapování souboru nejsou zapotřebí žádné systémové prostředky, vytvořte objekt mapování souboru, který je velký jako soubor (nastavte obě parametry dwMaximumSizeHigh a dwMaximumSizeLow funkce CreateFileMapping na nulu), i když neočekáváte zobrazení celého souboru. Náklady na systémové prostředky vznikají při vytváření a zpřístupnění zobrazení.
Můžete zobrazit část souboru, která nezačíná na začátku souboru. Další informace naleznete v tématu Vytvoření zobrazení v rámci souboru.