標籤:style blog color io 使用 ar 檔案 資料 art
記憶體映像是通過將檔案對應到記憶體中去以提高檔案讀取速度。
此時可以使用指標快速存取檔案中的資料
1.
使用的函數
要將外部儲存的檔案對應到記憶體中,需要使用
#include<sys/types.h>#include<sys/mman.h>void *mmap(void *start.size_t length,int prot,int flag,int fd,off_t offset);
此時,若start不為NULL會將檔案對應到此位置,但是不保證一定能成功;
length表示佔用記憶體映像的大小,位元組記;
prot表示記憶體映像的安全屬性,可選項為:
PROT_EXEC //被映射的記憶體可能可執行 PROT_NONE // 被映射的記憶體不可訪問PROT_READ //被映射的記憶體可讀PROT_WRITE //被映射的記憶體可寫
flag表示記憶體映像的標誌
MAP_FIXED //若無法在start建立映像,則出錯返回MAP_REIVATE //對記憶體的改動不反映到外存檔案中MAP_SHARED //將記憶體中的改動儲存到外存檔案中
off_t表示映像的內容距離檔案頭的位移量
調用失敗返回-1,否則返回映像記憶體起始地址
****注意需要在進程中開啟檔案才可以進行映射***
2.
修改記憶體映像的保護值prot
int protect(const void *addr,size_t length,int prot);
成功會返回0,出錯返回-1,且會將errno置為它。
3.
將記憶體映像寫入外存
int msync(const void *start,size_t length,int flag);flag的參數選項為:MS_ASYNC //調度一個寫操作並返回MS_INVALIDATE //將映像到相同檔案的映像無效以便使其更新為新資料MS_SYNC //完成寫操作後函數返回
4.
修改映像記憶體大小
void *mremap(void *old_addr,size_t old_length,size_t new_length,unsigned long flag)
參數flag表示是否在需要時移動映像的位置
調用成功返回映像新地址,否則返回錯誤值-1
記憶體映像IO-Linux下C編程指南