在这里我想使用系统 IPC 方法,例如
<sys/msg.h> /* SysV message queues */
<sys/ipc.h> /* General IPC definitions */
这里我的android NDK代码是C语言的,我使用消息队列IPC机制与其他C应用程序进行通信。
那么请让我知道有什么方法可以实现这个 IPC 目标吗?
如何在android NDK代码中实现这个IPC机制?
一年前,我写了一份关于这个主题的调查。这是其中的一部分:
2 Unix IPC机制
Unix IPC 机制包括:
- Unix 信号。
- Unix 管道。
- Unix 域套接字。
同时Android中不包含Unix System-V IPC机制。
Bionic 故意不提供对 System-V IPC 机制的支持,例如
由 semget()、shmget()、msgget() 提供。这样做的原因是为了避免否认——
服务期[11]。
2.1 Unix信号
我们可以在以下位置找到 Unix 信号如何工作的最佳解释之一:维基百科 http://en.wikipedia.org/wiki/Signal_%28computing%29: “A
信号是 Unix、类 Unix 中使用的进程间通信的有限形式
其他符合 POSIX 标准的操作系统。本质上它是一个异步通知
发送到进程以通知它发生的事件。当一个信号是
发送到进程时,操作系统会中断进程的正常执行流程
。在任何非原子指令期间都可以中断执行。如果该过程有
先前注册了一个信号处理程序,该例程被执行。否则默认
信号处理程序被执行。”
看来Android编程中才使用unix信号。而且,
一些信号已被禁用调试模式 http://filippos.vasilak.is/blog/2011/04/20/unix-signals-in-android-ndk/。然而,这是一个可能的IPC
机制。
2.2 Unix管道
管道是一种通信机制,允许直接连接输出流
一个进程的输入流与另一个进程的输入流。 unix 有两种类型
管道:有名管道和无名管道。看来只能在Android编程中
使用命名管道。在这种情况下,两个进程使用一个特殊文件进行交互
连接输出和输入。值得一提的是,管道是单向方式
通信的过程,即一个进程始终是读取者,第二个进程始终是写入者。
通信文件必须在 Linux 文件系统上创建,因为 sdcard 的 FAT32
不允许创建管道。下面是如何创建命名 unix 管道的示例
并用于Android http://habrahabr.ru/blogs/android/108103/(俄语)。这个例子的源代码可以找到here http://code.google.com/p/androiddemos/.
2.3 Unix域套接字
Unix 域套接字与 unix 管道相反,允许在以下位置传输信息:
两种方式:从服务器到客户端和从客户端到服务器。 Unix 域套接字
Unix 管道使用文件系统作为地址名称空间。这意味着服务器和
客户端使用特殊文件建立通信。考虑到Android有两个
用于对 unix 域套接字进行编程的类:LocalServerSocket 和
本地套接字。所有的实现都可以围绕这两个类构建,
不需要使用本机代码来创建 unix 域套接字。一个简单的例子如何
显示使用 unix 域套接字here http://www.devdaily.com/java/jwarehouse/android/core/java/android/net/LocalServerSocket.java.shtml.
[11] Android ndk 文档。 android-ndk-r6b 的 NDK 文档
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)