系統呼叫mmap()用於共享記憶體的兩種方式:
(1)使用普通檔案提供的記憶體對映:適用於任何程序之間;
此時,需要開啟或建立乙個檔案,然後再呼叫mmap();典型呼叫**如下:
fd=open(name, flag, mode); if(fd<0) ...
ptr=mmap(null, len , prot_read|prot_write, map_shared , fd , 0);
通過mmap()實現共享記憶體的通訊方式有許多特點和要注意的地方。
(2)使用特殊檔案提供匿名記憶體對映:適用於具有親緣關係的程序之間,例如父子程序間的通訊;
ptr=mmap(null, len , prot_read|prot_write, map_shared|map_anonymous , -1 , 0);
由於父子程序特殊的親緣關係,在父程序中先呼叫mmap(),然後呼叫fork()。那麼在呼叫fork()之後,子程序繼承父程序匿名對映後的位址空間,同樣也繼承mmap()返回的位址,這樣,父子程序就可以通過對映區域進行通訊了。注意,這裡不是一般的繼承關係。一般來說,子程序單獨維護從父程序繼承下來的一些變數。而mmap()返回的位址,卻由父子程序共同維護。對於具有親緣關係的程序實現共享記憶體最好的方式應該是採用匿名記憶體對映的方式。此時,不必指定具體的檔案,只要設定相應的標誌即可。
linux 程序間共享記憶體
可以採用sysv的shmget shmat 實現。但是我更喜歡shm open mmap 更簡單。writer.c include include include include include include include include struct ofs stat int main voi...
linux程序通訊 共享記憶體
共享記憶體是ipc機制中的第二個。他允許連個不相關的程序訪問同一塊邏輯記憶體,能夠有效地實現兩個程序間資料傳遞。int shmget key t key,sizr t size,int shm 建立共享記憶體 key為共享記憶體段的命名,size為以位元組為單位的記憶體容量,shm 包含9位元許可權...
Linux程序通訊 共享記憶體
對於linux來講,不同程序之間的記憶體是不能讀寫的,乙個程序只能讀寫自己所屬的記憶體。a程序是不能讀寫b程序記憶體的?如果程式確實想通過記憶體交換資料怎麼辦?linux提供共享記憶體機制。共享記憶體是由核心處於多個程序間交換資訊的目的而留出的一塊記憶體區 段 共享記憶體也需要設定相關許可權的。這段...