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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NDK是否为消息队列提供支持?相关的知识,希望对你有一定的参考价值。

我正在尝试使用android ndk构建一个共享库。运行ndk build时出现此错误

fatal error: 'mqueue.h' file not found

根据我对谷歌搜索的理解,问题是Android确实提供了对某些POSIX或System V功能(如消息队列)的支持。

所以我想知道这是否正确?如果是的话,我的选择是什么 - 我可以对我的应用程序进行哪些更改以模仿消息队列?

(我在Ubuntu 14.04 PC上使用android-ndk-r16b)

答案

是的,Android上不支持POSIX消息队列,以及其他一些SysV IPC机制。简而言之,这是因为可能导致无法恢复的资源泄漏。这不仅适用于“忘记”释放所获得的IPC资源而且适用于每个资源的错误应用程序。原因是Android集中使用kill(app_pid, SIGKILL)从后台进程回收系统资源,刚刚由用户启动。结果应用程序死亡,没有机会执行拆卸。内核无法释放IPC资源,因为它们可能以不可预测的方式被其他进程共享(与文件描述符和虚拟内存不同)。请记住,Android主要在资源受限的硬件上运行,因此某些此类资源重新排列是不可避免的。更多背景是here。旧NDK包中包含此文档,但在某些时候它已被删除。

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

最后,您仍然可以使用管道,UNIX域套接字和可能命名的管道(当然,如果底层文件系统支持这样的inode)。

以上是关于NDK是否为消息队列提供支持?的主要内容,如果未能解决你的问题,请参考以下文章

网易云消息队列服务正式上线!

是否有提供 Amazon SQS 高可用性的 FIFO 消息队列服务?

消息队列(mq)是啥?

Android Studio“不推荐使用当前的 NDK 支持”

MSMQ消息队列

Android 逆向Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )(代码片段