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