shmat

王朝百科·作者佚名  2010-09-10
窄屏简体版  字體: |||超大  

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

核心处理函数: 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>

intshmget(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 );

// 删除共享内存–删除共享内存,彻底不可用,释放空间

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航