一.共享記憶體資料結構
對於每個共享記憶體區,核心維護如下資訊結構,定義在, 在ubuntu中路徑:/usr/include/linux/shm.h
二. system v共享記憶體函式:
#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);
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
(1)功能:用來建立共享記憶體
原型 int shmget(key_t key, size_t size,
int shm***);
引數:
key:這個共享記憶體段名字
size: 共享記憶體大小
shm***: 由九個許可權標誌構成,它們的用法和建立檔案時使用的mode模式標誌是一樣的
返回值: 成功返回乙個非負整數,即該共享記憶體段的標識碼;
失敗返回-1
(2)功能:將共享記憶體段連線到程序位址空間
原型void *shmat(int shmid, const void *shmaddr, int shm***);
引數shmid: 共享記憶體標識
shmaddr: 指定連線的位址
shm***: 它的兩個可能取值是shm_rnd和shm_rdonly
返回值:成功返回乙個指標,指向共享記憶體第乙個位元組;失敗返回-1
shmaddr 為null,核心自動選擇乙個位址
shmaddr 不為null且shm***無shm_rnd標記,則以shmaddr為連線位址。
shmaddr不為null且shm***設定了shm_rnd標記,則連線的位址會自動向下調整為shmlba的整數倍。
公式:shmaddr - (shmaddr % shmlba) # shmlba為4096
shm***=shm_rdonly,表示連線操作用來唯讀共享記憶體
(3)功能:將共享記憶體段與當前程序脫離
原型 int shmdt(const void *shmaddr);
引數shmaddr: 由shmat所返回的指標
返回值:成功返回0;失敗返回-1
注意:將共享記憶體段與當前程序脫離不等於刪除共享記憶體段
(4)功能:用於控制共享記憶體
原型 int shmctl(int shmid, int cmd, struct shmid_ds *buf);
引數shmid: 由shmget返回的共享記憶體標識碼
cmd: 將要採取的動作(有三個可取值)
buf: 指向乙個儲存著共享記憶體的模式狀態和訪問許可權的資料結構
返回值:成功返回0;失敗返回-1
cmd 的取值如下,與訊息佇列類似:
ipc_stat 把shmid_ds結構中的資料設定為共享記憶體的當前關聯值
ipc_set 在程序有足夠許可權的前提下,把共享記憶體的當前關聯值設定為shmid_ds資料結構中給出的值
ipc_rmid 刪除共享記憶體段
shmwrite.c
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define err_exit(m) \
do while(0)
typedef struct stu
stu;
int main(int argc, char *argv)
//sleep(10);
shmdt(p);//將共享記憶體段與當前程序脫離
shmctl(shmid,ipc_rmid,null);
return 0;
}
shmread.c
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define err_exit(m) \
do while(0)
typedef struct stu
stu;
int main(int argc, char *argv)
共享記憶體System V
system v 共享記憶體區 對於每個共享記憶體區,核心維護如下的資訊結構 obsolete,used only for backwards compatibility and libc5 compiles struct shmid ds struct shmid ds 共享記憶體操作api 0....
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 ...