查
ipcs -m
增
ipcmk -M 1024(size)
ipcmk -M 1024(size) -p 0666
删
ipcrm -m 1024(id)
size的上限:4G
[
chenming@localhost src]$ cat /proc/sys/kernel/shmmax
4294967295
4294967295
-----------------------------API---------------------------------
#include <sys/types.h>
#include <sys/shm.h>
shmget的用法: 出错返回-1,否则返回int,作为shmid
只新建:shmget(
IPC_PRIVATE, shm_size, 0666);
有则获取,没有则报错: shm_id = shmget(shm_num, 0,
0666或SHM_R);
有则获取,没有则新建: shm_id = shmget(shm_num, shm_size,
IPC_CREAT|0666);
没有则新建,有则报错:
shm_id = shmget(shm_num, shm_size,
IPC_CREAT|IPC_EXCL
|0666);
shmat
void *shmat(int shmid, const void *shmaddr, int shmflg);
shmat(shmid, NULL, 0) 读写
shmat(shmid, NULL, SHM_RDONLY) 只读
返回指针或(void*)-1
shmdt(ptr)
返回0或-1
删:
shmctl(shmid, IPC_RMID, 0)
查
struct shmid_ds buf;
shmctl(shmid, IPC_STAT, &buf);
osl::MemoryDataStream os(shmptr, buf.shm_segsz, false);
0666权限的构成:
SHM_R
| SHM_W | (SHM_R>>3) | (SHM_W>>3) | (SHM_R>>6) | (SHM_W>>6)