關於mmap說明:
使乙個磁碟檔案與儲存空間的乙個緩衝區相對映。也就是說讀取緩衝區的資料,就相當於讀檔案中的相應位元組。所以同樣,將資料存入緩衝區,就把相應的位元組自動寫入檔案(map_shared標誌,而map_private不影響原檔案,只影響檔案的副本)。
操作步驟是:首先開啟檔案,然後從檔案的off偏移量處的len長度到指定的緩衝區。
檔案長度和緩衝區長度的關係,如果對映區長度不是頁長,那麼系統會提供頁長的對映區。所以你如果操作超過檔案的長度,可能不會出錯。
mmap返回的是該對映區的起誓位址。(虛擬位址)。
共享儲存可以由不相關的程序使用,而相關的程序可以使用/dev/zero的mmap。
建立乙個儲存區,初試化為0,多個程序的共同祖先使用了map_shared標誌,那這些程序都共享該儲存區間。建立了指定長度的儲存區以後,需要關掉裝置。
同上面的一樣,是匿名對映。指定標誌為map_anon,檔案描述符號是-1。
在相關的程序中,可以使用匿名對映的方式的mmap,當然,有名也可以。
無關的程序,可以使用shm的方式,也可以用mmap同乙個檔案的方式,好象這樣的話,同步和困難。
共享記憶體最簡單說明
開發中,往往多個程序要對同一塊記憶體進行讀寫操作,這裡可以用共享記憶體實現。服務端 include stdafx.h include define buf size 64 define share memory name test include using namespace std int tm...
IPC之共享記憶體(2)
在記憶體對映檔案中給計數器持續加1 本程式的目的是使父子程序之間共享存放著計數器的乙個記憶體區 int main exit 0 for i 0 i nloop i exit 0 共享乙個記憶體區和乙個訊號量的父子程序 父程序在呼叫fork之前建立的記憶體對映關係由父子程序之間共享。我們在開啟檔案以後...
程序間通訊 2 共享記憶體
一 共享記憶體實現程序間通訊的基礎 以32位系統為例,其可定址的最大記憶體為4gib 2 32 這4gib記憶體就是常說的虛擬記憶體。linux核心將這4gib的虛擬記憶體分為兩部分 底部較大的部分用於使用者程序,即使用者空間 user space 頂部專用於核心,即核心空間 kernel spac...