c - 不同程序中的linux动态共享内存

标签 c linux shared-memory

我使用以下代码在程序 A 中创建一个共享内存:

shm = shm_open("/mfs_hash_pool_container", O_CREAT|O_RDWR, 0666);

size = sizeof(struct mfs_hash_pool_container);

ftruncate(shm, size);

mfs_hash_pool_stat_p = (struct mfs_hash_pool_container *)mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, shm, 0);

我用它来存储哈希表。

另一个程序B,会收到程序A发过来的addr(mfs_hash_pool_stat_p+offset),但是我不能写在B里。 这是否意味着我也必须在 B 中打开此共享内存?还有其他方法可以解决吗?因为我自动创建了这段内存。

谢谢你们。

最佳答案

您不能只在其他程序中使用该地址。 B 必须:

  • 获取文件描述符:shm_open("/mfs_hash_pool_container", O_RDWR, 0)
  • 为文件描述符映射内存:mmap 就像 A 一样

注意事项:

  • 你需要检查mmap的返回值(它可能返回MAP_FAILED)
  • 你不需要转换mmap的返回值

关于c - 不同程序中的linux动态共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9409079/

相关文章:

c 程序使用 logn 时间复杂度查找升序数组中的重复元素

无法使用 mmap/malloc/open 等在 64 位 linux 系统上创建大于 2GB 的文件

java - 在 Maven 中,我如何发现依赖于特定依赖项的内容?

linux - 在/dev/shm 的子目录中创建共享内存时,shm_open() 失败并返回 EINVAL

c - 在 C 函数中返回浮点值

c - 解析数据流以获取控制字符串

c - 运算符(operator) !!在内核 C

linux - 为什么 "read"不读取命令输出的第一行?

c - 检查共享内存中的值的 if 语句有什么问题?

c - shmat() 即使我有读取权限也被拒绝