1、概述
共享内存也是在内存中申请的一块临时的存储空间,电脑关机就会自动释放,是效率最高,速度最快的一种通讯方式;
读共享内存,将数据从内存直接拷贝到用户层
写共享内存,将数据从用户层直接拷贝到内存
创建一块共享内存,这块共享内存不属于进程,独立于进程,进程结束后仍然存在
2、命令
查看系统中存在的共享内存空间:ipcs -m (s--->show)
删除系统中存在的共享内存空间:ipcrm -m shmid (rm--->remove ,shmid是申请共享内存成功后返回的标识)
3、操作
int main(int argc, char *argv[])
{
//key:十六进制的整数,可以理解为该空间的名字
//参数二:共享内存的大小
//shmflg: 操作方式和权限
int shmid = shmget(0x001024, 4096, IPC_CREAT|0664);
if (-1 == shmid)
{
perror("shmget");
exit(EXIT_FAILURE);
}
//参数二NULL:由系统在进程空间中选择一个合适的位置来关联共享内存
//SHM_RDONLY:只能读取共享内存空间的数据
//void *addr = shmat(shmid, NULL, SHM_RDONLY);//shmat进程关联共享内存
//0:读写关联共享内存空间
void *addr = shmat(shmid, NULL, 0);
if ((void*)-1 == addr)
{
perror("shmat");
exit(EXIT_FAILURE);
}
char caMsg[8] = "88888888";
//方式一
//strcpy((char*)addr, caMsg);
//方式二
//memcpy(addr, caMsg, strlen(caMsg)+1);
//方法三
sprintf((char*)addr, "%s", caMsg);
//解除进程和共享空间的关联
shmdt(addr);
//pause();//进程挂起
return 0;
}