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 ...