V系统贡献原理及其详细介绍请点击这里查看,本文不作详解。http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index2.html
需注意:
1.指定共享文件:如/etc/shm/shmtest 此处shmtest需要自己建立;
2.创建IPC通讯ID值:key=ftok(char * fname,int id),fname就时你指定的文件名,id是子序号,值为1-255之间。
V系统贡献原理及其详细介绍请点击这里查看,本文不作详解。http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index2.html
需注意:
1.指定共享文件:如/etc/shm/shmtest 此处shmtest需要自己建立;
2.创建IPC通讯ID值:key=ftok(char * fname,int id),fname就时你指定的文件名,id是子序号,值为1-255之间。
最近用到内存共享,收集整理了些资料,做了个简单的对比,详细的原理、应用及例子请点击表格下面的连接。
| 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 ); // 取得共享内存的状态 // 删除共享内存–删除共享内存,彻底不可用,释放空间 |