Unix下操作共享内存 _VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1923 | 回复: 0   主题: Unix下操作共享内存         下一篇 
kim
注册用户
等级:中校
经验:1729
发帖:222
精华:0
注册:2011-7-21
状态:离线
发送短消息息给kim 加好友    发送短消息息给kim 发消息
发表于: IP:您无权察看 2015-5-5 16:54:36 | [全部帖] [楼主帖] 楼主

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

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


--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论