Unix下操作共享内存
shmat
作用:共享内存区对象映射到调用进程的地址空间
核心处理函数: 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 );
// 删除共享内存–删除共享内存,彻底不可用,释放空间 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
2010-03-23 免费的中文分词模块