zoukankan      html  css  js  c++  java
  • Linux学习日志--共享内存

    一:什么是共享内存

                共享内存是属于IPC(Inter-Process Communication进程间通信)机制,其它两种是信号量和消息队列,该机制为进程开辟创建了特殊的地址范围,就像malloc分配那样。进程能够将同一段共享内存连接到自己的地址空间上。从而操作共享内存。所以说。共享内存提供了多个进程之间共享和传递数据一种方式。须要注意的是:该机制没有提供同步机制,所以我们须要採取有效的机制来同步对共享内存的訪问。


    二:共享内存的原理图


        


              


    三: 相关的函数


    头文件:

       

    #include <sys/types.h>

    #include <sys/ipc.h>

    #include <sys/shm.h>


    创建或打开函数:

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

    參数:第一个key是程序提供的,用于给共享内存命名。假设该命名的共享内存已经打开,则直接返回该内存标识。

                第二个sie是规定内存的大小。

                第三个是掩码合成值。包含权限值和IPC_CREAT或IPC_EXCL。比如:0600|IPC_CREAT 代表可读写而且假设该内存不存在,就创建一个。

     

    返回:调用成功,返回内存标识。失败,返回-1.


    连接函数:

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

    作用://映射进程和共享内存的地址空间

    參数:

                第一个shmid是创建函数返回标识。

                第二个shmaddr 是共享内存在进程的地址位置。通常为NULL。让系统默认。

                第三个shmflg是位标识。通常为0

    返回:调用成功,返回指向共享内存第一个字节的指针。失败,返回-1;


    分离函数:

    int shmdt(const void *shmaddr);//用于分离进程空间和共享内存段

    返回:调用成功,返回0    失败。返回-1。


    删除共享内存段函数:

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

    參数:

                第一个shmid是创建函数返回标识。

                第二个cmd 是对共享内存操作。 通常为IPC_RMID  代表删除。

                第三个通常为NULL





  • 相关阅读:
    row migeration and row chain
    测量sql 解析耗费的时间比例
    Introduction to Oracle Wait Interface notes
    查看 library cache 命中率
    keep buffer cache
    recycle pool
    JAVA annotation入门
    从 08年开始写博客,之前一直在 新浪上写,但是好多朋友都在CSDN上,所以今天也搬家了;
    Linux I2C核心、总线与设备驱动
    从 08年开始写博客,之前一直在 新浪上写,但是好多朋友都在CSDN上,所以今天也搬家了;
  • 原文地址:https://www.cnblogs.com/llguanli/p/8628854.html
Copyright © 2011-2022 走看看