• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    解决Linux system v 共享内存问题

    system v 共享内存

    #include <sys/types.h>
    #include <sys/shm.h>
    int shmget(key_t key, size_t size, int shmflg);

    建立:进程与共享内存的关联关系

    key_t key:16进制的非0数字。

    一般有两种方式设置它。

    第一种:调用fotk函数

    第二章:直接使用IPC_PRIVATE

    size:共享内存的大小

    shmflg:

    返回值:成功返回这片共享内存的标识号;失败返回-1,errno被设置。

    #include <sys/types.h>
    #include <sys/shm.h>
    void *shmat(int shmid, const void *shmaddr, int shmflg);

    shmid:由shmget函数创建的,也就是shmget函数的返回值

    shmaddr:

    NULL:让内核去申请内存空间

    非NULL:自己用malloc开辟一个空间,让共享内存shmid和这个地址关联上。但是如果不是4K的整数倍,内核会向上或者向下调整。

    shmflg:

    SHM_RND:读写

    SHM_RDONLY:只读

    返回值:

    成功:返回内存地址

    失败:返回(void *) -1

    #include <sys/types.h>
    #include <sys/shm.h>
    int shmdt(const void *shmaddr);

    取消进程与共享内存的关联关系

    shmaddr:shmat的返回值

    返回值:成功0;失败-1,并设置errno。

    #include <sys/types.h>
    #include <sys/shm.h> 
    int shmctl(int shmid, int cmd, struct shmid_ds *buf);

    对共享内存操作,更具cmd的不同,对共享内存进行不同的操作。

    shmid:由shmget函数创建的,也就是shmget函数的返回值

    cmd:

    IPC_STAT:得到共享内存的状态

    IPC_RMID:标记删除共享内存(当共享内存的引用计数变为0时,删除)

    IPC_SET:设置共享内存的属性(修改权限,修改shmid等)

    等等

    buf:shmid_ds结构体

    返回值:当cmd是IPC_RMID时:成功0;失败-1,并设置errno

    用命令【ipcs】可以查看共享内存的状态

    ------ Shared Memory Segments --------
    key    shmid   owner   perms   bytes   nattch   status
    0x00007fff 65536   ys     664    256    0
    0x00007ffe 98305   ys     664    256    0
    0x0000555e 131074   ys     664    256    0
    0x00000011 229379   ys     664    256    3

    总结

    以上所述是小编给大家介绍的解决Linux system v 共享内存问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
    如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

    上一篇:Docker数据卷和容器编排的使用
    下一篇:Linux系统为什么要吃掉我的“内存”
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    解决Linux system v 共享内存问题 解决,Linux,system,共享,内存,