核心處理函數(shù): void *shmat( int shmid , char *shmaddr , int shmflag );shmat()是用來允許本進(jìn)程訪問一塊共享內(nèi)存的函數(shù)。
int shmid是那塊共享內(nèi)存的ID。
char *shmaddr是共享內(nèi)存的起始地址
int shmflag是本進(jìn)程對(duì)該內(nèi)存的操作模式。如果是SHM_RDONLY的話,就是只讀模式。其它的是讀寫模式
成功時(shí),這個(gè)函數(shù)返回共享內(nèi)存的起始地址。失敗時(shí)返回-1
最近用到內(nèi)存共享,收集整理了些資料,做了個(gè)簡(jiǎn)單的對(duì)比
|
mmap系統(tǒng)調(diào)用 |
系統(tǒng)V共享內(nèi)存 |
獲取共享
內(nèi)存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); |
映射內(nèi)存 |
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 );
使進(jìn)程中的映射內(nèi)存無效化,不可以使用。但是保留空間 |
其它 |
同步:
int msync ( void * addr , size_t len, int flags); |
控制:
shmctl( shmid , IPC_STAT , &buf );
// 取得共享內(nèi)存的狀態(tài)
shmctl( shmid , IPC_RMID , &buf );
// 刪除共享內(nèi)存–刪除共享內(nèi)存,徹底不可用,釋放空間 |
posted on 2011-01-21 17:31
李陽(yáng) 閱讀(3546)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
Linux