Linux share 記憶體共享

2021-07-10 21:57:05 字數 1126 閱讀 6255

共享記憶體

1 什麼是共享記憶體

使得兩個不同的程序共享一段邏輯記憶體,實際上都實現為共享同一段物理記憶體。

原理如下圖:

2 共享記憶體的使用

2.1共享記憶體的獲取

原型:int shmget (key_t key, size_t size, int shm***);

引數:1)key 共享記憶體的鍵值

特殊鍵值:ipc_private,該共享記憶體該建立程序所獨享

僅能用於父子程序間的通訊。

2)size 共享記憶體的大小,單位為位元組

3)標誌,和open的mode類似

特殊標誌:ipc_creat 建立共享記憶體,

多次「建立」不是錯誤

返回值:

成功: 返回乙個非負整數,作為共享記憶體的識別符號。

失敗:返回-1

2.2. 共享記憶體和邏輯位址間的關聯

原型:

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

引數1:即為shmget的返回值。

引數2:指定關聯到該程序的什麼位置

一般取0,讓系統自動選擇。

引數3:如果使用shm_rdonly 則該段共享記憶體是唯讀的,即使訪問許可權允許寫操作

一般取0

返回:返回乙個本程序空間內的虛擬指標,該指標關聯到共享記憶體。

2.3 共享核心和邏輯位址間的分離

原型:

int shmdt(const void *shmaddr);

引數:即為shmat的返回值

注意:僅分離,並不刪除該共享記憶體。

返回值:成功,返回0

失敗,返回-1

2.4 共享記憶體的控制

原型:

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

引數:

cmd: ipc_stat 獲取當前狀態,返回給引數3

ipc_set 設定共享記憶體(如果許可權允許)

ipc_rmid 刪除該段共享記憶體

2.5 例項

mainr.c

mainw.c

Linux共享記憶體及共享記憶體API

共享記憶體區是最快的ipc 程序間通訊 形式。用共享記憶體從伺服器拷貝檔案資料到客戶端 共享記憶體基本api include include 1.int shmget key t key,size t size,int shm 功能 用來建立共享記憶體 key 是這個共享記憶體段的名字 size 共...

mysql共享記憶體 MySQL全域性共享記憶體介紹

前言 全域性共享記憶體則主要是 mysql instance mysqld程序 以及底層儲存引擎用來暫存各種全域性運算及可共享的暫存資訊,如儲存查詢快取的 query cache,快取連線線程的 thread cache,快取表檔案控制代碼資訊的 table cache,快取二進位制日誌的 binl...

mysql共享記憶體 MySQL全域性共享記憶體介紹

前言 全域性共享記憶體則主要是 mysql instance mysqld程序 以及底層儲存引擎用來暫存各種全域性運算及可共享的暫存資訊,如儲存查詢快取的 query cache,快取連線線程的 thread cache,快取表檔案控制代碼資訊的 table cache,快取二進位制日誌的 binl...