mmap函數實現共享內存

   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.

wKiom1el5IORFskaAAB9GIoxJaM705.png

wKioL1el5ITRtUhdAAAUW3Pui8w870.png




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章