共享記憶體System V

2021-07-11 04:05:23 字數 3502 閱讀 4753

system v 共享記憶體區

對於每個共享記憶體區,核心維護如下的資訊結構:

/* obsolete, used only for backwards compatibility and libc5 compiles */

struct shmid_ds ;   

struct shmid_ds

;共享記憶體操作api:

0. ftok申請乙個system v ipc的key

1. shmget: 建立或開啟乙個system v共享記憶體區

2. shmat:  把共享記憶體區對映到程序位址空間

3. shmdt: 把共享內在區解對映

4. shmctl: 對共享記憶體區進行控制操作

1. shmget: 用來建立或開啟乙個共享記憶體區

name

shmget - allocates a system v shared memory segment

synopsis

#include

#include

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

key:system v ipc物件的key

size: 以位元組為單位指定記憶體區的大小。

當實際操作為建立乙個新的記憶體區時,

必須指定乙個不為0的size值。如果實際操作

為訪問乙個已經存在的共享記憶體區,那麼

size應為0.  共享記憶體區的大小為page_size(4k)的

整數倍。

shm***: 標誌位:

(1) 建立 ipc_creat |許可權位

(2) 開啟  0

返回值:

成功返回開啟的共享記憶體區的id(不是檔案描述符)

失敗返回-1,  errno被設定

2. shmat

name

shmat, shmdt - system v shared memory operations

synopsis

#include

#include

shmat用來把共享記憶體區對映到程序自己的位址空間。

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

shmid: 要對映的共享記憶體區

shmaddr:指定對映到程序位址空間具體哪個位址。

如為null(一般也為null),則讓作業系統自動

確定對映位址。

shm***:     對映標誌

(1) shm_rdonly 唯讀

(2) 0  可讀可寫

返回值:

成功返回對映共享記憶體區的首位址,

失敗返回null

3int shmdt(const void *shmaddr);

shmdt用來解對映的

int shmdt(const void *shmaddr);

4.name

shmctl - system v shared memory control

synopsis

#include

#include

shmctl用來對共享記憶體區進行控制操作的

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

shmid: 共享記憶體區的id,表示要對哪個共享記憶體區進行控制操作

cmd: 操作命令。常用有三個:

ipc_rmid: 刪除共享記憶體區.此時,第三個引數為null

ipc_stat:獲取共享記憶體區的屬性資訊。

獲取到的屬性資訊儲存在第三個引數

buf指向的結構體當中。

ipc_set: 設定共享記憶體區的屬性資訊。

通過第三個引數buf指向的結構體來改變。

shmid_ds結構以下三個成員,可以被你改變:

shm_perm. uid,  shm_perm.gid, shm_perm.mode.

buf:

返回值:

成功返回0,

失敗返回-1, errno被設定

System V 共享記憶體

一.共享記憶體資料結構 對於每個共享記憶體區,核心維護如下資訊結構,定義在,在ubuntu中路徑 usr include linux shm.h 二.system v共享記憶體函式 include include int shmget key t key,size t size,int shm vo...

System V共享記憶體

標頭檔案 include include intshmget key t key,size t size,int shm 功能 用來建立共享記憶體 引數 a key 這個共享記憶體段名字 b size 共享記憶體大小 c shm 由幾個許可權標誌構成,他們的用法和建立檔案時使用的model模式標誌是...

System V共享記憶體

struct shmid ds include include int shmget key t key,size t size,int shm void shmat int shmid,const void shmaddr,int shm int shmdt const void shmaddr ...