linux共享記憶體

2021-07-29 09:43:31 字數 1700 閱讀 1204

共享記憶體:開闢一塊記憶體,同一主機上的程序可以訪問。

程式設計模型

a       b

建立key   ftok  建立key

建立共享記憶體 shmget  獲取共享記憶體

掛載共享記憶體 shmat  掛載共享記憶體

使用共享記憶體 *p   使用共享記憶體

解除安裝共享記憶體 shmdt  解除安裝共享記憶體

獲取共享記憶體狀態 shmctl

刪除共享記憶體     shmctl

建立共享記憶體需要確定主機上乙個位置。這個位置必須唯一,key是乙個唯一的整數,這個整數由乙個檔案的偏移量來確定。

ftok從乙個檔名獲得乙個唯一的整數key

# include

# include

key_t  ftok(

const char *pathname,//檔名

int proj_id);//1-255的整數    保護碼

ftok使用檔案的偏移量經過保護碼的設定得到乙個整數。這個正整數用來確定乙個唯一的位址。

shm:share memory

#include

#include

int shmget(//成功返回shmid,失敗返回-1

key_t key, //ftok的返回值  乙個唯一的整數

size_t size, //大小

int shm***);//方式 ipc_creat

void *shmat(//成功返回記憶體位址,失敗返回-1

int shmid,//shmget的返回值 

const void *shmaddr, //設定掛載位址  建議null,由系統選擇掛載位址

int shm***);//掛載後的記憶體使用方式 shm_rdonly

int shmdt(

const void *shmaddr);//shmat的返回值

共享記憶體的資料是什麼格式?

資料流 stream

資料有沒有邊界?

沒有邊界

資料有沒有順序? 沒有

資料有沒有狀態

管道的資料沒有狀態 shm的資料會儲存最後乙個

單工?雙工? 雙工

ls -a

ipcs -a  檢視shm sem msg

-m    shm

-s    sem

-q    msg

ipcrm -a

-m    shm

-s    sem

-q    msg

int shmctl(

int shmid, //指定shm的id

int cmd,   //操作方式

ipc_stat   獲取shm的狀態

ipc_rmid   刪除shm

struct shmid_ds *buf);//狀態結構體,儲存shm的資訊

a

#include #include #include #include #include #include int shmid;

void hand(int s)

}int main()

return 0;

}

b

#include #include #include #include #include int main()

return 0;

}

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系統執行的每乙個程式,都是乙個程...