我使用以下代码在程序 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/