use*_*679 5 c android android-ndk
在这里,我想使用系统IPC方法
<sys/msg.h> /* SysV message queues */
<sys/ipc.h> /* General IPC definitions */
Run Code Online (Sandbox Code Playgroud)
这里我的android NDK代码是C语言,我使用消息队列IPC机制进行其他C应用程序的通信.
那么请让我知道有没有办法实现这个IPC目标?如何在android NDK代码中实现这个IPC机制?
Yur*_*ury 12
一年前,我写了一篇关于这个话题的调查.这是它的一部分:
2 Unix IPC机制
Unix IPC机制包括:
同时Android System-V IPC机制不包含在Android中.仿生故意不提供对System-V IPC机制的支持,例如semget(),shmget(),msgget()提供的机制.这样做的原因是为了避免拒绝服务[11].
2.1 Unix信号
关于unix信号如何工作的最佳解释之一我们可以在维基百科中找到:"信号是在Unix,类Unix和其他POSIX兼容操作系统中使用的有限形式的进程间通信.本质上,它是一个异步通知,发送给进程以通知它发生的事件.当信号发送到进程时,操作系统会中断进程的正常执行流程.在任何非原子指令期间都可以中断执行.如果进程先前已注册信号处理程序,则执行该例程.否则执行默认信号处理程序."似乎unix信号在Android编程中被随后使用.此外,在调试模式下已禁用某些信号.但是,它是一种可能的IPC机制.
2.2 Unix管道
Pipe是一种通信机制,允许直接连接一个进程的输出流和另一个进程的输入stread.有两种类型的unix管道:命名管道和未命名管道.似乎在Android编程中只使用了命名管道.在这种情况下,两个进程使用连接输出和输入的特殊文件进行交互.应该提到管道是单向通信的方式,即一个过程始终是读者,第二个过程始终是写入者.必须在Linux文件系统上创建通信文件,因为sdcard的FAT32不允许创建管道.下面是一个如何在Android(俄语)中创建和使用命名的unix管道的示例.可以在此处找到此示例的源代码.
2.3 Unix域套接字
与unix管道相反,Unix域套接字允许以两种方式传输信息:从服务器到客户端以及从客户端到服务器.Unix域套接字和unix管道使用文件系统作为地址名称空间.这意味着服务器和客户端使用特殊文件来建立通信.考虑到Android,有两个类用于编程unix域套接字:LocalServerSocket和LocalSocket.所有实现都可以围绕这两个类构建,并且不需要使用本机代码来创建unix域套接字.此处显示了如何使用unix域套接字的简单示例.
[11] Android ndk文档.android-ndk-r6b的NDK文档
| 归档时间: |
|
| 查看次数: |
7022 次 |
| 最近记录: |