zoukankan      html  css  js  c++  java
  • Unix下操作共享内存

    shmat

    作用:共享内存区对象映射到调用进程的地址空间

    核心处理函数: void *shmat( int shmid , char *shmaddr , int shmflag );shmat()是用来允许本进程访问一块共享内存的函数。
    int shmid是那块共享内存的ID。
    char *shmaddr是共享内存的起始地址
    int shmflag是本进程对该内存的操作模式。如果是SHM_RDONLY的话,就是只读模式。其它的是读写模式
    成功时,这个函数返回共享内存的起始地址。失败时返回-1
    最近用到内存共享,收集整理了些资料,做了个简单的对比
      mmap系统调用 系统V共享内存
    获取共享
    内存ID
    #include <sys/mman.h>
    fd=open(name ,flag,mode);
    if(fd<0)
    ….
    #include <sys/ipc.h>
    #include <sys/shm.h>
    int shmget(key_t key, size_t size, int shmflg);
    映射内存 ptr=mmap(NULL,len, PROT_READ|PROT_WRITE, 
    MAP_SHARED , fd , 0); 
    void *shmat( int shmid , char *shmaddr , int shmflag );
    解除映射 int munmap( void * addr, size_t len ) ; int shmdt( char *shmaddr );
    使进程中的映射内存无效化,不可以使用。但是保留空间
    其它 同步:
    int msync ( void * addr , size_t len, int flags);
    控制:
    shmctl( shmid , IPC_STAT , &buf ); 
    // 取得共享内存的状态
    shmctl( shmid , IPC_RMID , &buf ); 
    // 删除共享内存–删除共享内存,彻底不可用,释放空间

  • 相关阅读:
    物料主档的屏幕增强
    删除请求号(网上转载)
    Echarts X轴内容过长自动隐藏,鼠标移动上去显示全部名称方法
    mscms学习
    java 基础(泛型)
    java 基础(枚举类)
    java 基础(抽象类)
    java 基础(单例)
    android项目杂记
    Android Studio--学习系列(3)发版
  • 原文地址:https://www.cnblogs.com/me115/p/1992261.html
Copyright © 2011-2022 走看看