核心处理函数: 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 ); 
            
              // 删除共享内存–删除共享内存,彻底不可用,释放空间 | 
    
 
	posted on 2011-01-21 17:31 
李阳 阅读(3587) 
评论(0)  编辑 收藏 引用  所属分类: 
Linux