共享記憶體學習

2021-08-14 08:50:44 字數 2120 閱讀 9204

1、  建立獲取共享記憶體

1.1標頭檔案

#include

#include

1.2功能描述

建立或者獲取共享記憶體並返回描述符。

1.3 函式原型

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

1.4 返回值

成功:返回建立或者獲取到的共享記憶體的描述符。

失敗:-1

1.5 引數說明

key:共享記憶體的鍵值

size:共享記憶體的大小

shm***:開啟標誌,如果使用了ipc_creat,則會新建立一塊共享記憶體。

2、  對映共享記憶體

2.1 標頭檔案

#include

#include

2.2 函式功能

把shmid指定的共享記憶體對映到程序的位址空間中去。

2.3 函式原型

void * shmat(int shmid,const void *shmaddr,intshm***)

2.4 返回值

返回對映到程序空間之後的記憶體位址。

2.5引數說明

shmid:要對映的共享記憶體的描述符

shmaddr:指定對映之後的位址,但是一般情況都讓該引數為空(null),使linux系統自動分配要對映的位址空間。

shm***:標誌

3、  脫離共享記憶體

3.1 標頭檔案

#include

#include

3.2 函式功能

從程序位址空間中斷掉與共享記憶體對映。

3.3 函式原型

int shmdt(const void *shmaddr)

3.4 返回值

成功:0

失敗:-1

3.5 引數說明

shmaddr:要斷開的共享記憶體的對映位址

4、  刪除共享記憶體

4.1 標頭檔案

#include

#include

4.2 函式功能

控制共享記憶體

4.3 函式原型

int shmctl(int shmid,int cmd,structshmid_ds *buf)

4.4 返回值

失敗:-1

成功:根據不同的操作返回不同的值

4.5 引數說明

shmid:要控制的共享記憶體的id

cmd:決定執行什麼樣的操作,如ipc_rmid(表示刪除共享記憶體)。

buf:獲取linux描述的共享記憶體的shmid_ds結構,基本不使用。

測試**:

read.c

#include #include #include #include #include struct sharememary

;struct sharememary * sharemem;

void main()

sharememaryarea = shmat(shmid,null,0);

if(sharememaryarea == (void*)-1)

sharemem = (struct sharememary *)sharememaryarea;

while(1)

else

}sleep(1);

}}

write.c

#include #include #include #include #include #include struct sharememary

;struct sharememary * sharemem;

void main()

sharememaryarea = shmat(shmid,null,0);

if(sharememaryarea == (void*)-1)

sharemem = (struct sharememary *)sharememaryarea;

sharemem->taxlifeflag = 0;

sharemem->hdlclifeflag = 0;

while(1)

else

sleep(1);

} }}

共享記憶體IPC入門學習

系統建立ipc通訊 如訊息佇列 共享記憶體時 必須指定乙個id值。通常情況下,該id值通過ftok函式得到。ftok原型如下 key t ftok char fname,int id fname就時你指定的檔名 該檔案必須是存在而且可以訪問的 id是子序號,雖然為int,但是只有8個位元被使用 0 ...

Linux學習日誌 共享記憶體

一 什麼是共享記憶體 共享記憶體是屬於ipc inter process communication程序間通訊 機制,其它兩種是訊號量和訊息佇列,該機制為程序開闢建立了特殊的位址範圍,就像malloc分配那樣。程序能夠將同一段共享記憶體連線到自己的位址空間上。從而操作共享記憶體。所以說。共享記憶體提...

學習筆記之共享記憶體

共享記憶體 共享記憶體是程序間通訊方式中效率最高的一種,因為程序可以對記憶體進行直接讀寫,而沒有複製等其他操作,共享記憶體在核心中被建立,用時對映在使用者空間,在使用者空間操作。由於多個程序可同時訪問共享記憶體,因此需要同步和互斥機制配合使用 一 函式介面 申請key值,除建立共享記憶體以外的程序需...