博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进程通信之共享内存
阅读量:6818 次
发布时间:2019-06-26

本文共 927 字,大约阅读时间需要 3 分钟。

共享内存

    首先应该清楚,共享内存是进程共享数据最快的一种方法,同样这也表明了它的不安全性因素。
一、获得\创建共享内存
    #include <sys/ipc.h>
    #include <sys/shm.h>
    int shmget(key_t shmid,size_t size,int shmflg);
    key 0(IPC_PRIVATE):会建立新共享内存对象,大于0的32位整数:视参数shmflg来确定操作。通常要求此值来源于ftok返回的IPC键值
    size 大于0的整数:新建的共享内存大小,以字节为单位 ;只获取共享内存时指定为0
    shmflg 0:取共享内存标识符,若不存在则函数会报错
IPC_CREAT:当shmflg&IPC_CREAT为真时,如果内核中不存在键值与key相等的共享内存,则新建一个共享内存;如果存在这样的共享内存,返回此共享内存的标识符
IPC_CREAT|IPC_EXCL:如果内核中不存在键值与key相等的共享内存,则新建一个消息队列;如果存在这样的共享内存则报错
    此函数得到一个共享内存标识符或创建一个共享内存对象并返回共享内存标识符。
二、映射共享内存
    #include <sys/types.h>
    #include <sys/shm.h>
    char *shmat(int shmid,char *shmaddr,int shmflg);
    at表示attach。由此可见,此函数的作用为将标示符为shmid的共享内存映射到当前运行的进程中。
换句话说就是进程连接共享内存。返回的是映射的共享内存的地址。
    shmaddr 指定共享内存出现在进程内存地址的什么位置,直接指定为NULL让内核自己决定一个合适的地址位置。
    shmflg SHM_RDONLY:为只读模式,其他为读写模式 。
三、断开共享内存
    #include <sys/types.h>
    #include <sys/shm.h>
    int shmdt(char *shmaddr);
    shmaddr为连接共享内存的起始地址,对比shmat里参数即知。返回0为成功。
    注意此函数只是进程断开与共享内存的连接,而不是删除。当然,若是进程结束,则自动断开连接。

转载地址:http://dgbzl.baihongyu.com/

你可能感兴趣的文章
.NET平台开源项目速览(5)深入使用与扩展SharpConfig组件
查看>>
u-boot-1.3.4 移植到S3C2440
查看>>
HotSpot运行时概览#2
查看>>
Go结构体标签表达式v1.0发布,参数校验杀手锏
查看>>
对react中setState的总结
查看>>
[回炉计划]-实现一个图片预加载
查看>>
正则表达式
查看>>
360前端星计划学习-html
查看>>
专注dApp高效执行和高并发的下一代公有链
查看>>
ONE-sys 整合前后端脚手架 koa2 + pm2 + vue-cli3.0 + element
查看>>
携带更方便功能全 iPone与Apple Watch球形尿袋
查看>>
行为型模式:策略模式
查看>>
实现批量数据增强 | keras ImageDataGenerator使用
查看>>
太忙女友消息未及时回复,分手吗?python微信自动消息帮你谈恋爱
查看>>
Java 多线程NIO学习
查看>>
命名实体识别
查看>>
动态切换的动态代理
查看>>
电商项目(下)
查看>>
vue 数字滚动递增效果
查看>>
vue2.0中父子,兄弟组件的传值2
查看>>