Unix下操作共享内存
2011-03-23 11:20
253 查看
shmat
作用:共享内存区对象映射到调用进程的地址空间
核心处理函数: void *shmat( int shmid , char *shmaddr , int shmflag );shmat()是用来允许本进程访问一块共享内存的函数。
int shmid是那块共享内存的ID。
char *shmaddr是共享内存的起始地址
int shmflag是本进程对该内存的操作模式。如果是SHM_RDONLY的话,就是只读模式。其它的是读写模式
成功时,这个函数返回共享内存的起始地址。失败时返回-1
最近用到内存共享,收集整理了些资料,做了个简单的对比
作用:共享内存区对象映射到调用进程的地址空间
核心处理函数: 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 ); // 删除共享内存–删除共享内存,彻底不可用,释放空间 |
相关文章推荐
- UNIX 如果查询一个共享内存已经被IPCRM,程序中如何操作保证安全
- VC++ 共享内存读写操作
- Unix IPC之基于共享内存的计数器
- 在向服务器发送请求时发生传输级错误。 (provider: 共享内存提供程序, error: 1 - 执行读/写操作期间检测到 I/O 错误。)
- UNIX系统中的进程通信之共享内存
- UNIX 共享内存应用中的问题及解决方法
- C#共享内存操作是如何实现
- 【2016/1】 Unix IPC 信号 共享内存 消息队列
- c++中共享内存操作函数解析(三)
- UNIX共享内存总结
- Linux下基于POSIX标准的共享内存操作示例
- unix下共享内存
- 一个操作共享内存的类!可以方面的添加,删除数据,包括各种结构体!
- Linux\Unix IPC进程通信实例分析(一):共享内存通信---文件映射mmap方式
- <转>UNIX 共享内存应用中的问题及解决方法
- golang对共享内存的操作
- 共享内存创建shmget控制操作shmat,shmctl
- 共享内存和操作共享内存几个函数的用法
- 一个操作共享内存的类!可以方面的添加,删除数据,包括各种结构体!
- C语言共享内存-基本操作