IPC 共享記憶體

2021-09-27 16:23:51 字數 2977 閱讀 1033

共享記憶體是程序間共享資料的一種最快的方法,乙個程序向共享的記憶體區域寫入了資料,共享這個記憶體區域的所有程序就可以立刻看到其中的內容。

共享記憶體允許兩個或者多個程序共享給定的儲存區域。

使用共享記憶體要注意的是多個程序之間對乙個給定儲存區訪問的互斥。若乙個程序正在向共享記憶體區寫資料,則在它做完這一步操作前,別的程序不應當 去讀、寫這些資料,否則會造成共享記憶體中資料的混亂。

在使用共享記憶體進行通訊時,要注意程序間的同步,控制同步的問題需要使用訊號量。

在linux作業系統中共享記憶體限制值如下:

每個共享記憶體的物件都有其制定的定義型別,該結構體為 shmid-ds ,定義形式如下:

struct shmid_ds 

;

#include

#include

intshmget

(key_t key, size_t size,

int shm***)

;

功能:

建立或開啟一塊共享記憶體區域,如果已經存在一塊共享記憶體區域,那麼,該函式可以開啟這個已存在的共享記憶體

引數

返回值:

成功:返回共享記憶體識別符號

失敗:返回-1

使用shell命令操作共享記憶體:

#include

#include

void

*shmat

(int shmid,

const

void

*shmaddr,

int shm***)

;

引數

#include

#include

intshmdt

(const

void

*shmaddr)

;

功能

將共享記憶體和當前程序分離(僅僅是斷開聯絡並不刪除共享記憶體)

引數

返回值: 成功返回 0,失敗返回 -1

#include

#include

intshmshmctl

(int shmid,

int cmd,

struct shmid_ds *buf)

;

功能:共享記憶體空間的控制。

引數

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

shared_memory_write.c

#include

#include

#include

#include

#include

#include

#include

#define bufsz 2048

intmain

(int argc,

char

*ar**)

/*建立共享記憶體*/

shmid =

shmget

(key, bufsz, shm_r|shm_w|ipc_creat);if

(shmid <0)

/*對映*/

shmadd =

shmat

(shmid,

null,0

);if(shmadd <0)

/*拷貝資料至共享記憶體區*/

printf

("copy data to shared-memory\n");

bzero

(shmadd, bufsz)

;strcpy

(shmadd,

"data in shared memory\n");

return0;

}

shared_memory_read.c

#include

#include

#include

#include

#include

#include

#include

#define bufsz 2048

intmain

(int argc,

char

*ar**)

system

("ipcs -m");

/*開啟共享記憶體*/

shmid =

shmget

(key, bufsz, shm_r|shm_w);if

(shmid <0)

/*對映*/

shmadd =

shmat

(shmid,

null,0

);if(shmadd <0)

/*讀共享記憶體區資料*/

printf

("copy data from shared-memory\n");

printf

("data = [%s]\n"

, shmadd)

;/*分離共享記憶體和當前程序*/

ret =

shmdt

(shmadd);if

(ret <0)

else

/*刪除共享記憶體*/

shmctl

(shmid, ipc_rmid,

null);

system

("ipcs -m");

return0;

}

IPC 共享記憶體

共享記憶體 shared memory 是最簡單的程序間通訊方式,它允許多個程序訪問相同的記憶體,乙個程序改變其中的資料後,其他的程序都可以看到資料的變化。共享記憶體是程序間最快速的通訊方式 程序共享同一塊記憶體空間。訪問共享記憶體和訪問私有記憶體一樣快。不需要系統呼叫和核心入口。不造成不必要的記憶...

IPC 共享記憶體

a 意義 多個程序共享一部分物理記憶體。訪問快,方便 b 先建立共享記憶體 int shmget key t key,int size,int shm 1.key 標誌共享記憶體的鍵值 0 ipc private a key 0 a 意義 多個程序共享一部分物理記憶體。訪問快,方便 b 先建立共享記...

IPC 共享記憶體

程序可以將同一段共享記憶體連線到它們自己的位址空間中,所有程序都可以訪問共享記憶體中的位址。共享記憶體並未提供同步機制,使用訊號量進行同步。共享記憶體的特點 1 共享記憶體是程序間共享資料的一種最快的方法。乙個程序向共享的記憶體區域寫入了資料,共享這個記憶體區域的所有程序就可以立刻看到其中的內容。2...