linux共享内存

    #include <sys/ipc.h>

    #include <sys/shm.h>

       int shmget(key_t key, size_t size, int shmflg);

       功能:创建一个新的共享内存段,或者获取一个既有的共享内存段的标识。

       新创建的内存段中的数据都会被初始化为0

       参数:

        -key:通过它可找到或者创建一个共享内存,一般用16进制,非0

        -size:共享内存的大小,不能为0

        -shmflg:共享内存的属性

            -访问权限

            -附加属性

        返回值:返回一个标识,失败返回-1

    #include <sys/types.h>

    #include <sys/shm.h>

       void *shmat(int shmid, const void *shmaddr, int shmflg);

        -功能:和当前的进程进行关联

        -参数:

            -shmid:共享内存的标识

            -shmaddr:申请的共享内存的起始地址,指定NULL,内核指定

            -shmflg:对共享内存的操作 SHM_RDONLY(必须要有读权限),读写指定0, SHM_EXEC(可执行权限) ...

        返回值:返回共享内存的起始地址,失败返回(void *) -1

    #include <sys/types.h>

    #include <sys/shm.h>

       void *shmat(int shmid, const void *shmaddr, int shmflg);

       功能:解除当前进程和共享内存的关联

       参数:

            -shmaddr:共享内存的首地址

        返回值:成功0,失败-1

    #include <sys/ipc.h>

    #include <sys/shm.h>

       int shmctl(int shmid, int cmd, struct shmid_ds *buf);

        功能:对共享内存进行操作

        参数:

            -shmid:

            -cmd:要做的操作

                -IPC_STAT:获取状态

                -IPC_SET:设置共享内存的状态

                -IPC_RMID:标记共享内存被销毁

            -buf:要设置或者获取的共享内存的属性信息

        返回值:

*/

共享内存和内存映射的区别:

1.共享内存可以直接创建,内存映射需要依赖磁盘文件(匿名映射除外)

2.共享内存效率更高

3.内存:

    所有的进程操作的是同一块共享内存

    内存映射,每个进程在自己的虚拟地址空间有一个独立的内存

4.数据安全:

    -进程突然退出,共享内存还存在,而内存映射区消失

    -运行进程的电脑死机

        数据存储在共享内存中,没有了

        内存映射区的数据,由于磁盘文件中的数据还在,所以内存映射区 数据还在

    -生命周期

        内存映射区:进程退出,内存映射区销毁

        共享内存:进程退出,共享内存还在,标记删除(所有的关联的进程数为0),或者关机

        如果一个进程退出,会自动和共享内存取消关联

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值