zoukankan      html  css  js  c++  java
  • Linux _ share 内存共享

    共享内存
    1 什么是共享内存
    使得两个不同的进程共享一段逻辑内存,实际上都实现为共享同一段物理内存。
    原理如下图:
    2 共享内存的使用
    2.1共享内存的获取
    原型:int shmget (key_t key, size_t size, int shmflg);
    参数:1)key 共享内存的键值
    特殊键值:IPC_PRIVATE,该共享内存该创建进程所独享
    仅能用于父子进程间的通信。
    2)size 共享内存的大小,单位为字节
    3)标志,和open的mode类似
    特殊标志:IPC_CREAT 创建共享内存,
    多次“创建”不是错误
    返回值:
    成功: 返回一个非负整数,作为共享内存的标识符。
    失败:返回-1
    2.2. 共享内存和逻辑地址间的关联
    原型:
    void *shmat(int shmid, const void *shmaddr, int shmflg);
    参数1:即为shmget的返回值。
    参数2:指定关联到该进程的什么位置
    一般取0,让系统自动选择。
    参数3:如果使用SHM_RDONLY 则该段共享内存是只读的,即使访问权限允许写操作
    一般取0
    返回:返回一个本进程空间内的虚拟指针,该指针关联到共享内存。
    2.3 共享内核和逻辑地址间的分离
    原型:
    int shmdt(const void *shmaddr);

    参数:即为shmat的返回值
    注意:仅分离,并不删除该共享内存。
    返回值:成功,返回0
    失败,返回-1
    2.4 共享内存的控制
    原型:
    int shmctl(int shmid, int cmd, struct shmid_ds *buf);
    参数:
    cmd: IPC_STAT 获取当前状态,返回给参数3
    IPC_SET 设置共享内存(如果权限允许)
    IPC_RMID 删除该段共享内存
    2.5 实例
    mainr.c
    mainw.c

  • 相关阅读:
    一本书
    在linux oracle 10g/11g x64bit环境中,goldengate随os启动而自己主动启动的脚本
    关于仿酷狗音乐播放器开源:寻求一套音乐播放器素材,让仿酷狗开源
    Cocos2d-x中Vector<T>容器以及实例介绍
    成都传智播客Java/PHP培训就业率高
    P1341 无序字母对
    P1168 中位数
    P1146 硬币翻转
    P1340 兽径管理
    P2023 [AHOI2009]维护序列
  • 原文地址:https://www.cnblogs.com/Sico2Sico/p/5384211.html
Copyright © 2011-2022 走看看