首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于ASHMEM的SHM替换

基于ASHMEM的SHM替换
EN

Stack Overflow用户
提问于 2013-07-07 15:36:32
回答 2查看 3.4K关注 0票数 4

我正在开发一个从*nix到Android的库移植,这个库使用共享内存或shm。安卓没有System V shm。相反,它使用ashmem

有没有人知道可以将shm调用映射到ashmem中的填充库?谷歌并不是很有帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-24 02:24:42

这是我在处理类似的移植问题时是如何工作的:

我没有使用shmfd = open(SHM_PATH,O_RDWR)来创建和获取文件描述符,而是将其替换为

代码语言:javascript
复制
int fd = ashmem_create_region("SharedRegionName", size); 

并使用文件描述符来获取基地址:

代码语言:javascript
复制
int base_address = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

您可以使用返回描述符的本机函数将base_address从本机代码传递给java代码。

Android有一个用于Ashmem的包装类,名为MemoryFile。你也可以在里面看看。

以下链接帮助我创建了自己的包装器:

票数 3
EN

Stack Overflow用户

发布于 2014-04-29 21:14:06

这里有一个库,你可以通过调用Android ashmem (shmget/shmat/shmdt/shmctl LD_PRELOAD )来模拟Linux的共享内存,你也可以直接链接到这个库。

https://github.com/pelya/android-shmem

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17510157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档