liunx中共享内存

作者: 持之以蘅 | 来源:发表于2019-04-09 14:44 被阅读50次

    实现步骤

    创建共享内存区

    进程1申请一块共享区域,通过shmget函数生成

    映射共享内存到进程1

    通过shmat实现

    映射共享内存到进程2

    通过进程1的shmat函数和同一个key值,执行shmat,将内存映射到进程2

    进程1和进程2相互通信

    进程自己协商处理

    撤销内存映射关系

    完成通信,需要撤销映射,使用shmdt函数实现

    删除共享内存区

    shmctl函数实现

    主要函数

    shmget

    shmget

    参数一:key为共享内存命名;
    调用成功,发回与key相关的内存标识符(非负整数);调用失败返回-1;
    参数二:size以字节为单位指定需要共享的内存容量;
    参数三:shmflg为权限标志,共享内存的权限标志同文件的读写权限一样;

    shmat

    shmat

    参数一:shm_id是shmget函数返回的共享内存标识;
    参数二:shm_addr指定共享内存连接到当前进程中的地址位置,通常为空,表示让系统来选择共享内存的地址;
    参数三:shn_flg为一组标志位,通常为0;

    shmdt

    shmdt

    作用:将共享内存从当前进程中分离,使该共享内存对当前进程不再可用;
    其中shmaddr是shmat函数返回的地址指针,调用成功返回0,失败返回-1;

    shmctl

    shmctl

    参数一:shmget函数返回共享内存标识符;
    参数二:command可以取三个值
    IPC_STAT:把shmid_ds结构中的数据设置为共享内存的当前关联值,即用共享内存的当前关联值覆盖shmid_ds的值;
    IPC_SET:如果进程有足够的权限,就把共享内存的当前关联值设置为shmid_ds结构中给出的值;
    IPC_RMID:删除共享内存段;
    参数三:buf是个结构指针,指向共享内存模式和访问权限的结构;

    shmid_ds

    shmid_ds

    至少包括以上这些

    相关文章

      网友评论

        本文标题:liunx中共享内存

        本文链接:https://www.haomeiwen.com/subject/yfmbiqtx.html