位于系统的交换分区
#include<sys/ipc.h>
#incude<sys/shm.h>
int shmget(key_t key, size_t size, int shmflg)
- key 手动指定的共享内存id IPC_PRIVATE(0)
- size 手动指定共享内存大小 非创建者可指定0
- shmflg 0655 | IPC_CREAT 共享内存创建者需要指定此标志
IPC_EXCL | IPC_CREAT一起使用可确保共享内存已存在时返回错误
- mode_flags
- SHM_HUGETLB 使用 huge pages
- SHM_NORESERVE 不保留交换空间
void *shmat(int shm_id, const void* shm_addr, int shmflg)
- shm_addr attach地址
- shmflg SHM_RDONLY:为只读模式,其他为读写模式
int shmdt(const void* shmaddr)
- 当前进程与共享内存分离
int shmctl(int shm_id, int command, struct shmid_ds *buf)
- command
IPC_STAT:获取共享内存的状态,把共享内存的shmid_ds结构复制到buf中
IPC_SET:改变共享内存的状态,把buf所指的shmid_ds结构中的uid、gid、mode复制到共享内存的shmid_ds结构内
IPC_RMID:删除这片共享内存
- SHMMAX 共享内存总体最大字节数 /proc/sys/kernel/shmmax
- SHMMNI 共享内存总体最大段数 /proc/sys/kernel/shmmni
- SHMALL 共享内存总体最大页数 /proc/sys/kernel/shmall
IPC_STAT:得到共享内存的状态,把共享内存的shmid_ds结构复制到buf中 |