linux 进程间共享内存示例
写入端:
#include <iostream> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <sys/shm.h> using namespace std; struct MappingDataType { int mappingData; }; bool SetUsedPID(string mappingName) { void *shm = NULL; MappingDataType *shared; int shmid = shmget((key_t)1234, sizeof(MappingDataType), 0666|IPC_CREAT); if(shmid == -1) { fprintf(stderr, "shmget failed\n"); return false; } shm = shmat(shmid, 0, 0); if(shm == (void*)-1) { fprintf(stderr, "shmat failed\n"); return false; } shared = (MappingDataType*)shm; shared->mappingData = ::getpid(); /*if(shmdt(shm) == -1) { fprintf(stderr, "shmdt failed\n"); return false; } if(shmctl(shmid, IPC_RMID, 0) == -1) { fprintf(stderr, "shmctl(IPC_RMID) failed\n"); return false; }*/ return true; } int main(int argc, char *argv[]) { bool result = SetUsedPID("abc"); //打断点,运行读取端 cout << result << endl; return 0; }
读取端:
#include <iostream> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <sys/shm.h> using namespace std; struct MappingDataType { int mappingData; }; int GetUsedPID(string mappingName) { void *shm = NULL; MappingDataType *shared; int shmid = shmget((key_t)1234, sizeof(MappingDataType), 0666 | IPC_CREAT); if (shmid == -1) { fprintf(stderr, "shmget failed\n"); return 0; } shm = shmat(shmid, 0, 0); if (shm == (void*)-1) { fprintf(stderr, "shmat failed\n"); return 0; } shared = (struct MappingDataType*)shm; int pid = shared->mappingData; if (shmdt(shm) == -1) { fprintf(stderr, "shmdt failed\n"); } if (shmctl(shmid, IPC_RMID, 0) == -1) { fprintf(stderr, "shmctl(IPC_RMID) failed\n"); } return pid; } int main(int argc, char *argv[]) { int pid = GetUsedPID("abc"); cout << pid << endl; //<================= Put a breakpoint here return 0; }
桂棹兮兰桨,击空明兮溯流光。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2017-11-05 C# EasyHook MessageBox 示例(极简而全)
2013-11-05 webbrowser在不同的.netframework版本差异