Linux學習日誌 共享記憶體

2021-09-07 17:26:29 字數 1336 閱讀 9720

一:什麼是共享記憶體

共享記憶體是屬於ipc(inter-process communication程序間通訊)機制,其它兩種是訊號量和訊息佇列,該機制為程序開闢建立了特殊的位址範圍,就像malloc分配那樣。程序能夠將同一段共享記憶體連線到自己的位址空間上。從而操作共享記憶體。所以說。共享記憶體提供了多個程序之間共享和傳遞資料一種方式。須要注意的是:該機制沒有提供同步機制,所以我們須要採取有效的機制來同步對共享記憶體的訪問。

二:共享記憶體的原理圖

標頭檔案:

#include

#include

#include

建立或開啟函式:

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

引數:第乙個key是程式提供的,用於給共享記憶體命名。假設該命名的共享記憶體已經開啟,則直接返回該記憶體標識。

第二個sie是規定記憶體的大小。

第三個是掩碼合成值。包含許可權值和ipc_creat或ipc_excl。比如:0600|ipc_creat 代表可讀寫而且假設該記憶體不存在,就建立乙個。

返回:呼叫成功,返回記憶體標識。失敗,返回-1.

連線函式:

void *shmat(int shmid, const

void *shmaddr, int shm***);

引數:第乙個shmid是建立函式返回標識。

第二個shmaddr 是共享記憶體在程序的位址位置。通常為null。讓系統預設。

第三個shm***是位標識。通常為0

返回:呼叫成功,返回指向共享記憶體第乙個位元組的指標。失敗,返回-1;

分離函式:

int shmdt(const

void *shmaddr);//用於分離程序空間和共享記憶體段

返回:呼叫成功,返回0    失敗。返回-1。

刪除共享記憶體段函式:

int shmctl(int shmid, int cmd, struct shmid_ds *buf);

引數:第乙個shmid是建立函式返回標識。

第二個cmd 是對共享記憶體操作。 通常為ipc_rmid  代表刪除。

第三個通常為null

Linux 共享記憶體

一 概念 共享記憶體是被多個程序共享的一部分物理記憶體,是程序間共享資料的最快的一種方法。二 實現 分為兩個步驟 1 建立共享記憶體。2 對映共享記憶體。1 建立 int shmget key t key,int size,int shm 當key的取值為 ipc private 時,將建立一塊新的...

linux共享記憶體

linux共享記憶體使用 標頭檔案 include 1 建立共享記憶體 int shmget key t key,size t size,int shm 建立成功以後會返回乙個共享記憶體id,建立失敗返回 1。2 獲取共享記憶體 void shmat int shmid,const void shm...

linux 共享記憶體

共享記憶體解決的問題是 任意兩個程序之間的通訊如果是有名管道,是沒有辦法對管道中間的資料獲取讀和寫操作的,只能是兩段的資料,那麼如何對所有的資料進行操作 共享記憶體 共享記憶體也是通過核心來完成 命令 ipcs m p s 共享記憶體的工作機制如下所示 首先linux系統執行的每乙個程式,都是乙個程...