共享記憶體指 (shared memory)在多處理器的計算機系統中,可以被不同**處理(cpu)訪問的大容量記憶體。由於多個cpu需要快速訪問
儲存器,這樣就要對
儲存器進行
快取(cache)。任何乙個快取的資料被更新後,由於其他處理器也可能要訪問,共享記憶體就需要立即更新,否則不同的處理器可能用到不同的資料。共享記憶體是 unix下的
多程序之間的通訊方法 ,這種方法通常用於乙個程式的多
程序間通訊,實際上多個程式間也可以通過共享記憶體來傳遞資訊。
共享記憶體相比其他幾種方式有著更方便的資料控制能力,資料在讀寫過程中會更透明。當成功匯入一塊共享記憶體後,它只是相當於乙個字串指標來指向一塊記憶體,在當前程序下使用者可以隨意的訪問。缺點是,資料寫入程序或資料讀出程序中,需要附加的資料結構控制。
共享記憶體對映在程序位址空間的棧和堆之間
共享記憶體通過int shmget(key_t key, size_t size, int shm***);函式建立其中key是由ftok()函式自動獲取,size是所申請的共享記憶體的大小單位是位元組一般size是4096的整數倍,shm***為ipc_creat或者ipc_excl
用 int shmctl(int shmid, int cmd, struct shmid_ds *buf);函式刪除
申請到共享記憶體之後需要掛接到對應的程序上由 void *shmat(int shmid, const void *shmaddr, int shm***);函式實現
用 void *shmat(int shmid, const void *shmaddr, int shm***);函式解除掛接
com.h
#ifndef __shm__
#define __shm__
#include#include#include#include#includestatic shm(int size, int flag);
int create_shm(int size);
int get_shm();
char* at_shm(int shmid);
int dt_shm(char* addr);
int destory_shm(int shmid);
#endif //__shm__
com.c
#include"com.h"
static int shm(int size, int flag)
return shmid;
}int create_shm(int size)
int get_shm()
char* at_shm(int shmid)
int dt_shm(char* addr)
int destory_shm(int shmid)
server.c
#include"com.h"
int main()
dt_shm(str);
return 0;
}
client.c
#include"com.h"
int main()
dt_shm(str);
destory_shm(shmid);
return 0;
}
Linux下共享記憶體程式設計
利用共享記憶體 share memory 可以讓我們在任意兩個程序之間傳遞資料,而且也是相對容易實現的一種方法,在正常情況下,乙個程序所使用的記憶體是不允許其它程序訪問的,但是通過共享記憶體可以實現資料的共享。使用共享記憶體用到的api函式有 include include include key ...
Linux環境程序間通訊 共享記憶體
詳細內容出處 原理 mmap通過對映某個檔案來達到任意兩個程序之間的通訊。另外還可以通過匿名檔案對映的方式,來讓有親屬關係的程序也能互相通訊。所以mmap方式的共享記憶體又稱為對映記憶體。當然如果需要嚴格控制程序之間通訊的同步,可以使用到互斥量或者訊號量來控制。mmap的實現方式是通過各個程序不同的...
Linux 共享記憶體
一 概念 共享記憶體是被多個程序共享的一部分物理記憶體,是程序間共享資料的最快的一種方法。二 實現 分為兩個步驟 1 建立共享記憶體。2 對映共享記憶體。1 建立 int shmget key t key,int size,int shm 當key的取值為 ipc private 時,將建立一塊新的...