共享内存API函数 shmat() shmdt() shmctl()

本文详细介绍了共享内存区的映射与操作方法,包括shmat函数的应用、mmap系统调用、内存映射与解除映射的过程,以及同步与控制的相关函数,帮助开发者掌握共享内存的高效利用。
 

shmat

  作用:共享内存区对象映射到调用进程的地址空间
  核心处理函数: void *shmat( int shmid , void *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 );
// 删除共享内存–删除共享内存,彻底不可用,释放空间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值