Linux系统内存共享

2009年10月20日 由 dair 留言 »

        最近用到内存共享,收集整理了些资料,做了个简单的对比,详细的原理、应用及例子请点击表格下面的连接。

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

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

 

参考资料:

郑彦兴(详细,深入,有实例演示):

共享内存(上):http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index1.html

共享内存(下):http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index2.html

shmget() ——建立共享内存:

 http://hi.baidu.com/zengzhaonong/blog/item/628f54fb2869ee66024f5663.html

shmdt和shmctl的区别:

http://blog.163.com/wzgnr/blog/static/121225685200982833336319/

shmget,shmat,shmdt,shmctl:

http://hi.baidu.com/my2008space/blog/item/ec2c9cee84052be7cf1b3e6e.html

相关文章

广告位

1条评论

  1. 共享内存 说到:

    关于共享内存所归纳的问题很好,我学习的时候就碰到过这些问题。需要补充的是如果ftok中指定的文件不存才,也可以实现共享内存机制,可以编译,可以运行,但是会perror出来错误。

发布评论