若要將資料從檔案對應至程序的虛擬記憶體,您必須建立檔案映射。 MapViewOfFile 和 MapViewOfFileEx 函式會使用 createFileMapping所傳回的檔案對應物件句柄,來建立檔案檢視,或進程虛擬位址空間中檔案的一部分。 如果存取旗標與 CreateFileMapping 建立檔案對應物件時所指定的旗標衝突,這些函式就會失敗。
MapViewOfFile 函式會傳回檔案檢視的指標。 藉由取消引用在 MapViewOfFile 中所指定位址範圍中的指標,應用程式可以從檔案中讀取資料並寫入資料。 將內容寫入檔案檢視會導致檔案對應物件的變更。 實際寫入磁碟上的檔案是由系統處理。 當檔案對應物件寫入時,實際上不會傳輸數據。 相反地,會快取大部分的檔案輸入和輸出 (I/O),以改善一般系統效能。 應用程式可以呼叫 FlushViewOfFile 函式來覆寫此行為,以強制系統立即執行磁碟交易。
MapViewOfFileEx 函式的運作方式與 MapViewOfFile 函式完全相同,不同之處在於它允許進程在 lpvBase 參數的處理程式虛擬位址空間中指定檔案檢視的基位址。 如果指定的位址沒有足夠的空間,則呼叫會失敗。 因此,如果您必須將檔案對應至多個進程中的相同地址,進程應該交涉適當的位址:lpvBase 參數必須是系統記憶體配置粒度的整數倍數,否則呼叫會失敗。 若要取得系統的記憶體配置粒度,請使用 getSystemInfo函式,以填入 SYSTEM_INFO 結構的成員。
應用程式可以從相同的檔案對應物件建立多個檔案檢視。 檔案檢視的大小可以不同於其衍生來源的檔案對應物件,但必須小於檔案對應物件。 dwOffsetHigh 和 dwOffsetLow 參數所指定的位移,必須是系統配置粒度的倍數,MapViewOfFile。
相關主題