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

bxs*_*shi 1 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);
Run Code Online (Sandbox Code Playgroud)

我用它来存储哈希表.

另一个程序B将从程序A接收addr(mfs_hash_pool_stat_p + offset)发送,但是我不能用B写它.这是否意味着我还必须在B中打开这个共享内存?有没有其他方法可以解决这个问题?因为我自动创建这个内存.

谢谢你们.

cni*_*tar 7

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

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

笔记:

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