Android 基于ASHMEM的SHM替换

Android 基于ASHMEM的SHM替换,android,unix,shared-memory,ashmem,Android,Unix,Shared Memory,Ashmem,我正在使用从*nix到Android的库端口,库使用共享内存或shm。Android没有System Vshm。相反,它使用ashmem 是否有人知道要将shm调用映射到ashmem的垫片库?谷歌并不是很有帮助。这就是它在处理类似的移植问题时对我的作用: 我没有使用shmfd=open(SHM_PATH,O_RDWR)来创建和获取文件描述符,而是将其替换为 int fd = ashmem_create_region("SharedRegionName", size); 并使用文件描述符获取基

我正在使用从*nix到Android的库端口,库使用共享内存或
shm
。Android没有System V
shm
。相反,它使用
ashmem


是否有人知道要将
shm
调用映射到
ashmem
的垫片库?谷歌并不是很有帮助。

这就是它在处理类似的移植问题时对我的作用:

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

int fd = ashmem_create_region("SharedRegionName", size); 
并使用文件描述符获取基址:

int base_address = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
您可以使用返回描述符的本机函数从本机代码向java代码传递base_地址

Android有一个名为MemoryFile的Ashmem包装类。你也可以看看

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


这里有一个库,您可以使用Android ashmem(shmget/shmat/shmdt/shmctl调用)预先加载它来模拟Linux共享内存,您也可以直接链接到此库


我不得不投下第一个接近票数的一票,因为这显然离题了。。。