NDK是否为消息队列提供了支持



我正在尝试使用Android NDK构建共享库。运行ndk build

时,我会遇到此错误
fatal error: 'mqueue.h' file not found

我在搜索问题上了解的是,Android确实为某些POSIX或系统V功能提供了支持(例如消息队列(。

所以我想知道这是否正确?如果是,我有什么选择 - 我可以对申请进行什么更改,以模仿消息队列?

(我在Ubuntu 14.04 PC上使用Android-NDK-R16B(

是的,POSIX消息队列在Android上不支持以及其他一些SYSV IPC机制。简而言之,这是因为有可能导致无法确定的资源泄漏。这不仅对于"忘记"发布获得的IPC资源的错误应用程序,而且是针对每个人的。原因是Android强烈使用kill(app_pid, SIGKILL)将系统资源从背景过程中恢复到刚刚由用户启动的新的过程中。结果,应用程序死亡,没有机会执行拆解。内核无法发布该IPC资源,因为它们可能以无法预测的方式通过其他过程共享(与文件描述符和虚拟内存不同(。请记住,Android主要在资源约束的硬件上运行,因此不可避免的是某种此类资源重新安排。更多背景在这里。旧的NDK包装包含此文档,但在某个时候已被删除。

Android上IPC的替代方法通常包括基于Binder的解决方案。在本机代码中,您可以使用为共享内存段提供接口的ashmem。最新的平台版本将公共API暴露于此,请参见<android/sharedmem.h>。但是,对于较旧平台的事件,您可以通过与Ashmem驱动程序的直接互动来实现类似的功能,请参见libcutils来源。

最后,您仍然可以使用管道,Unix-Domain插座以及可能命名的管道(当然,如果基本文件系统支持此类Inodes(。

最新更新