Android本机库共享内存

时间:2014-06-29 10:59:18

标签: android c++ android-ndk shared-libraries shared-memory

我正在编写需要Android支持的本机共享库,我需要在使用此库的所有进程之间共享一些数据(UID和一些其他字段)。在Linux中,这是一个很好的机会POSIX共享内存。但Android NDK不支持POSIX共享内存。有ashmem,但是为了从其他进程访问共享内存区域,我需要使用binder IPC来传输打开的文件描述符。但这不是
合理地,因为当其他进程想要访问共享数据时,可以终止创建区域的进程。

有没有办法用Android共享内存解决我的问题?

1 个答案:

答案 0 :(得分:3)

首先,您不需要Binder,您可以通过Unix本地套接字使用sendmsg()和recvmsg()传递文件描述符。有关示例,请参阅[1]

中的SendFd()和ReceiveFd()函数

第二个ashmem区域是引用计数的,只要在ashmem区域打开一个文件描述符,它就不会消失,即使创建的进程被终止。

希望这有帮助。

[1] https://android.googlesource.com/platform/ndk/+/master/sources/android/crazy_linker/tests/test_util.h