Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Tworzenie obiektu mapowania plików w systemie Windows obejmuje otwarcie pliku przy użyciu funkcji CreateFile . Ten proces umożliwia mapowanie zawartości pliku bezpośrednio do pamięci w celu zapewnienia efektywnego dostępu i manipulacji. Aby upewnić się, że inne procesy nie mogą zapisywać w części pliku mapowanego, należy otworzyć plik z wyłącznym dostępem. Ponadto dojście do pliku powinno pozostać otwarte, dopóki proces nie będzie już potrzebował obiektu mapowania plików. Łatwym sposobem uzyskania dostępu na wyłączność jest określenie zera w parametrze fdwShareMode CreateFile. Dojście zwrócone przez element CreateFile jest używane przez funkcję CreateFileMapping w celu utworzenia obiektu mapowania plików.
Funkcja CreateFileMapping zwraca uchwyt do obiektu mapowania plików. Ten uchwyt będzie używany podczas tworzenia widoku pliku, aby można było uzyskać dostęp do pamięci udostępnionej. Podczas wywoływania metody CreateFileMappingnależy określić nazwę obiektu, liczbę bajtów do zamapowania z pliku oraz uprawnienie do odczytu/zapisu dla zamapowanej pamięci. Pierwszy proces wywołujący CreateFileMapping tworzy obiekt mapowania plików. Procesy wywołujące CreateFileMapping dla już istniejącego obiektu otrzymują uchwyt do tego obiektu. Możesz określić, czy pomyślne wywołanie funkcji CreateFileMapping utworzyło lub otworzyło obiekt mapowania pliku, wywołując funkcję GetLastError. getLastError zwraca NO_ERROR do procesu tworzenia i ERROR_ALREADY_EXISTS do kolejnych procesów.
Funkcja CreateFileMapping kończy się niepowodzeniem, jeśli flagi dostępu powodują konflikt z flagami określonymi podczas otwierania pliku przez funkcję CreateFile . Aby na przykład odczytywać i zapisywać w pliku:
- Określ wartości GENERIC_READ i GENERIC_WRITE w parametrze fdwAccesscreateFile.
- Określ wartość PAGE_READWRITE w parametrze fdwProtectelementu CreateFileMapping.
Utworzenie obiektu mapowania plików nie powoduje zatwierdzenia pamięci fizycznej, ale tylko je rezerwuje.
Rozmiar mapowania pliku
Rozmiar obiektu mapowania plików jest niezależny od rozmiaru mapowanego pliku. Jeśli jednak obiekt mapowania plików jest większy niż plik, system rozszerza plik przed zwróceniem polecenia CreateFileMapping . Jeśli obiekt mapowania plików jest mniejszy niż plik, system mapuje tylko określoną liczbę bajtów z pliku.
Parametry dwMaximumSizeHigh i dwMaximumSizeLowelementu CreateFileMapping umożliwiają określenie liczby bajtów do zamapowania z pliku:
Jeśli nie chcesz, aby rozmiar pliku został zmieniony (na przykład podczas mapowania plików tylko do odczytu), wywołaj metodę CreateFileMapping i określ zero zarówno dla dwMaximumSizeHigh , jak i dwMaximumSizeLow. Spowoduje to utworzenie obiektu mapowania plików, który jest dokładnie taki sam jak plik. W przeciwnym razie należy obliczyć lub oszacować rozmiar gotowego pliku, ponieważ obiekty mapowania plików są statyczne w rozmiarze; po utworzeniu nie można zwiększyć ani zmniejszyć ich rozmiaru. Próba mapowania pliku o długości zera w ten sposób kończy się niepowodzeniem z kodem błędu ERROR_FILE_INVALID. Programy powinny testować pliki o długości zerowej i odrzucać takie pliki.
Rozmiar obiektu mapowania pliku, który jest wspierany przez nazwany plik, jest ograniczony przez miejsce na dysku. Rozmiar widoku pliku jest ograniczony do największego dostępnego ciągłego bloku nieuwzględnianej pamięci wirtualnej.
Rozmiar obiektu mapowania plików, który wybierasz, kontroluje, jak daleko do pliku można "zobaczyć" z mapowaniem pamięci. Jeśli tworzysz obiekt mapowania plików o rozmiarze 500 KB, masz dostęp tylko do pierwszych 500 KB pliku, niezależnie od rozmiaru pliku. Ponieważ utworzenie większego obiektu mapowania plików nie zużywa żadnych zasobów systemowych, utwórz obiekt mapowania plików o rozmiarze równym rozmiarowi pliku (ustaw parametry dwMaximumSizeHigh i dwMaximumSizeLow funkcji CreateFileMapping na zero), nawet jeśli nie planujesz korzystać z całego pliku. Koszt zasobów systemowych obejmuje tworzenie widoków i uzyskiwanie do nich dostępu.
Możesz wyświetlić część pliku, która nie rozpoczyna się na początku pliku. Aby uzyskać więcej informacji, zobacz Tworzenie widoku w pliku.