删除分配给shm_open的共享内存段

问题描述

我有两个通过共享内存通信的c应用程序,其分配方式如下:

j

当我重新启动那些应用程序时,分配的内存保持可用,这对我的任务来说是很好的。但是,有时我必须更改n,所以旧数据变得无效。

我找到了j < n工具,该工具似乎能够手动取消分配共享内存区域,这正是我要寻找的。但是它需要my_type * shmmap(const char * filename) { int shm_fd = shm_open(filename,O_CREAT | O_RDWR,0666); if(shm_fd == -1) { return nullptr; } if(ftruncate(shm_fd,sizeof(my_type))) { close(shm_fd); return nullptr; } my_type * ret = (my_type *)mmap(0,sizeof(T),PROT_READ | PROT_WRITE,MAP_SHARED,shm_fd,0); close(shm_fd); if(ret == MAP_FAILED) { return nullptr; } return ret; } my_struct,而且我真的不知道如何仅知道用于调用ipcrm函数的文件名来获取那些值。我可以使用shmem-id命令看到很少的共享内存区域,而且我可以猜到哪个是我的大小,但这似乎行不通。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)