gpt4 book ai didi

android - 我们可以在android NDK代码中使用系统IPC吗

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:03:13 24 4
gpt4 key购买 nike

这里我想使用像

这样的系统 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 信号

我们可以在 wikipedia 中找到关于 unix 信号如何工作的最佳解释之一。 : “一种信号是 Unix、类 Unix 和其他符合 POSIX 标准的操作系统。本质上它是一个异步通知-发送给一个进程,以通知它发生了一个事件。当一个信号是发送给进程,操作系统中断进程的正常执行流程化。在任何非原子指令期间都可以中断执行。如果进程有之前注册了一个信号处理程序,该例程被执行。否则默认信号处理程序被执行。”看来 unix 信号被重新用于 Android 编程。而且,debug mode 中的一些信号已被禁用.但是,它是一个可能的 IPC机制。

2.2 Unix 管道

管道是一种允许直接连接输出流的通信机制一个进程与另一个进程的输入线程。有两种类型的unix管道:命名管道和未命名管道。好像只有在Android编程中使用命名管道。在这种情况下,两个进程使用一个特殊文件进行交互,该文件连接输出和输入。应该提到的是管道是单向的通信,即一个过程始终是读者,第二个过程始终是作者。通信文件必须在 Linux 文件系统上创建,因为 sdcard 的 FAT32不允许创建管道。这是一个如何创建命名 unix 管道的示例并用于 Android (俄语)。可以找到此示例的源代码 here .

2.3 Unix 域套接字

Unix 域套接字,与 unix 管道相反,允许在两种方式:从服务器到客户端和从客户端到服务器。 Unix 域套接字和 unix 管道使用文件系统作为地址 namespace 。这意味着服务器和客户端使用特殊文件建立通信。考虑到Android有两个用于编写 unix 域套接字的类:LocalServerSocket 和本地套接字。所有的实现都可以围绕这两个类构建,它是不需要使用 native 代码来制作 unix 域套接字。一个简单的例子如何显示了如何使用 unix 域套接字 here .

[11] Android ndk 文档。 android-ndk-r6b 的 NDK 文档

关于android - 我们可以在android NDK代码中使用系统IPC吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11428730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com