Linux中mmap函式的使用

2021-10-23 01:36:34 字數 1322 閱讀 5308

linux利用mmap函式允許程式建立共享記憶體,建立一段可以被多個程式讀寫的記憶體,乙個程式的修改可以被其他程式看見。還可以用在檔案的處理上,通過帶特殊許可權集的虛擬記憶體段實現,對虛擬記憶體段的讀寫會使作業系統讀寫磁碟檔案中的對應部分。

#include

void

*mmap

(void

* addr,size_t len,

int prot,

int flags,

int fildes,off_t off)

;

mmap函式建立乙個指向一段記憶體區域的指標,該記憶體區域與通過乙個開啟的檔案描述符訪問的檔案的內容相關聯。

off用來改變檔案中資料的起始偏移值,

len指定可以訪問的資料量,

addr可以請求某個特定的記憶體位址,取值為零時則指標自動分配。

prot引數用於設定記憶體段的訪問許可權,按位或,prot_read:允許讀,prot_write:允許寫,prot_exec:允許執行,prot_none:該記憶體段不可訪問。

flags引數控制程式對該記憶體段所造成的影響,map_private:記憶體段私有,修改只對本程序有效。map_shared:把對該記憶體段的修改儲存到磁碟檔案中。map_fixed:該記憶體段必須位於addr指定的位址處。

#include

intmsync

(void

* addr,size_t len,

int flags)

;

把該記憶體段的某個部分或全部的修改寫回到被對映的檔案中,或者從被對映的檔案中讀出。記憶體需要修改的部分由起始位址addr和長度len決定,flags引數控制執行修改的具體方式。ms_async採用非同步方式,ms_sync採用同步方式,ms_invalidate從檔案中讀回資料。

#include

.hint

munmap

(void

* addr,size_t len)

;

釋放分配的記憶體段。

mmap函式的使用

mmap系統呼叫並不是完全為了用於共享記憶體而設計的。它本身提供了不同於一般對普通檔案的訪問方式,程序可以像讀寫記憶體一樣對普通檔案的操作。而 posix或系統v的共享記憶體ipc則純粹用於共享目的,當然mmap 實現共享記憶體也是其主要應用之一。mmap系統呼叫使得程序之間通過對映同乙個普通檔案實...

mmap函式的使用

unix網路程式設計第二卷程序間通訊對mmap函式進行了說明。該函式主要用途有三個 1 將乙個普通檔案對映到記憶體中,通常在需要對檔案進行頻繁讀寫時使用,這樣用記憶體讀寫取代i o讀寫,以獲得較高的效能 2 將特殊檔案進行匿名記憶體對映,可以為關聯程序提供共享記憶體空間 3 為無關聯的程序提供共享記...

mmap函式使用

unix網路程式設計第二卷程序間通訊對mmap函式進行了說明。該函式主要用途有三個 1 將乙個普通檔案對映到記憶體中,通常在需要對檔案進行頻繁讀寫時使用,這樣用記憶體讀寫取代i o讀寫,以獲得較高的效能 2 將特殊檔案進行匿名記憶體對映,可以為關聯程序提供共享記憶體空間 3 為無關聯的程序提供共享記...