Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们可以在android NDK代码中使用系统IPC吗_Android_C_Android Ndk - Fatal编程技术网

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

我们可以在android NDK代码中使用系统IPC吗,android,c,android-ndk,Android,C,Android Ndk,这里我想使用系统IPCs方法,比如 <sys/msg.h> /* SysV message queues */ <sys/ipc.h> /* General IPC definitions */ /*SysV消息队列*/ /*一般IPC定义*/ 这里我的androidndk代码是用C语言编写的,我使用消息队列IPC机制与其他C应用程序进行通信 所以,请让我知道有什么方法可以实现这个目标吗? 如何在android NDK代码中实现IPC机制?一年前,我写

这里我想使用系统IPCs方法,比如

  <sys/msg.h>   /* SysV message queues */
  <sys/ipc.h>   /* General IPC definitions */
/*SysV消息队列*/
/*一般IPC定义*/
这里我的androidndk代码是用C语言编写的,我使用消息队列IPC机制与其他C应用程序进行通信

所以,请让我知道有什么方法可以实现这个目标吗?
如何在android NDK代码中实现IPC机制?

一年前,我写了一篇关于这个主题的调查报告。以下是其中的一部分:

2 Unix IPC机制

Unix IPC机制包括:

  • Unix信号
  • Unix管道
  • Unix域套接字
同时,Unix System-V IPC机制不包括在Android中。 Bionic故意不支持System-V IPCs机制,如 由semget()、shmget()和msgget()提供的。这样做的原因是为了避免否认- 服务质量[11]

2.1 Unix信号

unix信号如何工作的最好解释之一是:“A 信号是Unix、类Unix和Unix中使用的进程间通信的一种有限形式 其他兼容POSIX的操作系统。本质上它是一个异步通知- 发送到进程的操作,以便通知它发生的事件。当信号 发送到进程时,操作系统会中断进程的正常执行流- 执行可以在任何非原子指令期间中断 之前注册了一个信号处理程序,则执行该例程。否则,默认值为 已执行信号处理程序。“ 似乎unix信号在Android编程中被再次使用。此外 某些信号已在中禁用。然而,这是一种可能的IPC 机制

2.2 Unix管道

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

2.3 Unix域套接字

与Unix管道相反,Unix域套接字允许在中传输信息 两种方式:从服务器到客户端和从客户端到服务器。Unix域套接字 unix管道使用文件系统作为地址空间。这意味着服务器和 客户端使用特殊文件建立通信。考虑到Android,有两个 用于编程unix域套接字的类:LocalServerSocket和 LocalSocket。所有的实现都可以围绕这两个类进行构建,并且 不需要使用本机代码来创建unix域套接字。一个简单的例子如何 显示了使用unix域套接字的步骤


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

@JoachimPileborg感谢您的关注,我想问一下它的可行性,所以我可以在android NDK中使用Unix域套接字,因为它有利于通信。不,不是。例如,最好使用特殊的Android IPC,如Binder。我写这篇调查是为了证明这是可能的,但并不推荐。但我如何将这些信息传达给运行在android上的C服务应用程序呢。Binder用于Android NDK C代码与其他C应用程序代码之间的通信?Binder是Android IPC机制。因此,是的,它可以用来在两个本机进程之间进行通信。Android本身使用unix域套接字的地方,binder会增加复杂性,但没有什么有用的好处。