mmap將一個文件或者其他對象映射進內存。mmap也可以實現共享內存。mmap函數調用使得進程之間通過映射同一個文件實現共享內存。文件被映射到進程地址空間後,進程可以像讀寫內存一樣對文件進行操作。
函數原型:void* mmap(void* addr,size_t length,int prot,int flags,int fd,off_t offset);
addr:映射區的開始地址,設置爲0時表示系統決定映射區的起始地址
length:映射區的長度。長度單位爲字節
prot:期望的內存保護標誌。取以下幾個值:
PORT_EXEC:頁內容可以被執行 PORT_READ:頁內容可以被讀取
PORT_WRITE:頁內容可以被寫入 PROT_NONE:頁內容不可訪問
flag:指定映射對象的類型,映射選項與映射頁是否可以共享。
MAP_SHARED:與其他所有映射這個對象的進程共享映射空間。
MAP_PRIVATE:建立一個寫入時拷貝的私有映射。內存區域的寫入不會影響到原文件。
MAP_FIXED :使用指定的映射起始地址,如果由start和len參數指定的內存區重疊於現存的映射空 間,重疊部分將會被丟棄。如果指定的起始地址不可用,操作將會失敗。
fd: 有效的文件描述符。返回,由一般open()函數,其值可以設置爲-1.此時需要指定flags參數爲 MAP_ANON,表明進行的是匿名映射。
offset:被映射對象內容的起點。
返回值:成功,返回被映射區的指針;失敗,返回-1.