学习笔记之进程间的通讯之共享内存

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值