linux共享内存

linux共享内存_第1张图片linux共享内存_第2张图片linux共享内存_第3张图片

    #include

    #include

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

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

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

       参数:

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

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

        -shmflg:共享内存的属性

            -访问权限

            -附加属性

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

    #include

    #include

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

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

        -参数:

            -shmid:共享内存的标识

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

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

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

    #include

    #include

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

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

       参数:

            -shmaddr:共享内存的首地址

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

    #include

    #include

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

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

        参数:

            -shmid:

            -cmd:要做的操作

                -IPC_STAT:获取状态

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

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

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

        返回值:

*/linux共享内存_第4张图片

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

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

2.共享内存效率更高

3.内存:

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

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

4.数据安全:

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

    -运行进程的电脑死机

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

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

    -生命周期

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

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

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

你可能感兴趣的:(linux,运维,服务器)