程序間通訊方式之(四)共享記憶體

2021-07-22 17:20:53 字數 1054 閱讀 8890

物件:共享記憶體(share memory),訊息佇列(message quene),訊號燈(semaphore)

共享記憶體:特點:(1)是一種最為高效的程序間的通訊的方式,程序可以直接讀寫,而不需要任何資料的拷貝

(2)為了在程序間交換訊息,核心專門留出了一塊記憶體區,可以由需要訪問的程序將其對映

到自己的私有位址空間

(3)程序就可以直接讀寫這一記憶體區而不需要進行資料的拷貝,從而提高效率

(4)由於多個程序共享一段記憶體,因此需要一些共享機制,比如:互斥鎖和訊號量等

實現步驟:

(1)建立或開啟記憶體

(2)對映共享記憶體,即把指定的共享記憶體對映到程序的位址空間用於訪問

(3)撤銷共享記憶體對映

(4)刪除共享記憶體對映

int shmget(key_t key,int size,int shm***);

函式引數:ipc_private或ftok

size :共享記憶體區的大小

shm***:同open函式的許可權位,也可以用8進製表示法

返回值:成功返回記憶體段識別符號,

出錯返回-1

void *shmat(int shmid,const void *shmaddr,int shm***);

函式引數:shmid:要對映的共享記憶體區的識別符號

shmaddr:將共享記憶體對映到指定位置(若為null,則表示由系統自動完成對映)

shm***:shm_rdonly(共享記憶體唯讀),預設0(共享記憶體可讀可寫)

出錯返回-1

int shmdt(const void *shmaddr);

函式返回值:  0成功, -1出錯

int shmclt(int shmid,int cmd,struct shmid_ds *buf)

函式引數:shmid:要操作的共享記憶體識別符號

cmd:ipc_stat(獲取物件屬性)

ipc_set(設定物件屬性)

ipc_rmid(刪除物件)

buf:指定ipc_stat/ipc_set時用以儲存/設定屬性

函式返回值   0成功,-1出錯

程序間通訊方式 共享記憶體

所有的函式共用標頭檔案 include include include 3.1建立共享記憶體 shmget 函式 int shmget key t key,size t size,int shm 成功返回共享記憶體的id,出錯返回 1 1 第乙個引數key是長整型 唯一非零 系統建立ipc通訊 訊息...

Linux 程序間通訊之共享記憶體方式

共享記憶體方式 從物理記憶體裡面拿出來一部分作為多個程序共享。共享記憶體是程序間共享資料的一種最快的方法,乙個程序向共享記憶體區域寫入資料,共享這個記憶體的所有程序都可以立即看到其中內容。共享記憶體實現步驟 一 建立共享記憶體,使用 shmget 函式。二 對映共享記憶體,將這段建立的共享記憶體對映...

Linux 程序間通訊之共享記憶體方式

linux 程序間通訊之共享記憶體方式。共享記憶體方式 從物理記憶體裡面拿出來一部分作為多個程序共享。共享記憶體是程序間共享資料的一種最快的方法,乙個程序向共享記憶體區域寫入資料,共享這個記憶體的所有程序都可以立即看到其中內容。共享記憶體實現步驟 一 建立共享記憶體,使用shmget函式。二 對映共...