#include <sys/ipc.h>
#include <sys/shm.h>
int shmget(key_t key, size_t size, int shmflg);
shmflg:
IPC_CREAT:
如果不存在,创建之,如果存在获取之。
IPC_EXCL:
1.无法单独使用
2.IPC_CREAT|IPC_EXCL:如果不存在,创建之,如果出错就返回给用户。
如果创建成功,一定是一个新的shm!
key_t key:
能够标定唯一性。看到同一个key就具备了看到同一份资源的可能性。
通过ftok创建key
#include <sys/types.h>
#include <sys/ipc.h>
key_t ftok(const char *pathname, int proj_id);
操作系统给用户提供的资源上线 ulimit -a
操作系统禁止捕捉9号信号。
共享内存=物理内存块+共享内存的相关属性。
ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
查看共享内存。
共享内存的生命周期是随OS的,不是随进程的!!!
删除共享内存使用shmid!!!
#include <sys/types.h>
#include <sys/shm.h>
void *shmat(int shmid, const void *shmaddr, int shmflg);
int shmdt(const void *shmaddr);
通过shmat使共享内存和进程实现关联。
**shmaddr:**指定虚拟地址让共享内存映射到指定的虚拟地址。通常设为null
shmflg:与读写权限有关,通常设为0;
shmat:返回的是共享空间的起始地址。
ipcrm -m 65536
删除共享内存。
ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
查看共享内存。