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

2024-03-31

在这里我想使用系统 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(使用前将#替换为@)

我们可以在android NDK代码中使用系统IPC吗 的相关文章

  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • ASP MVC:服务应该返回 IQueryable 的吗?

    你怎么认为 你的 DAO 应该返回一个 IQueryable 以便在你的控制器中使用它吗 不 您的控制器根本不应该处理任何复杂的逻辑 保持苗条身材 模型 而不是 DAO 应该将控制器返回给视图所需的所有内容 我认为在控制器类中看到查询 甚至
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • 即使手动设置显示环境变量后,WSL Ubuntu 也会显示“错误:无法打开显示”

    我在 WSL Ubuntu 上使用 g 我使用 git 克隆了 GLFW 存储库 使用了ccmake命令配置并生成二进制文件 然后使用make在 build 目录中最终创建 a文件 我安装了所有OpenGL相关的库 usr ld 我不记得我
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”

    我提到了一些类似的问题 但没有一个涉及IO 当我使用时 我在java中使用了相同的代码Eclipse 那次就成功了 但现在我尝试在中使用这段代码Mono for Android C 它不起作用 我正在尝试运行此代码来创建一个InputStr
  • 通过 NHibernate 进行查询,无需 N+1 - 包含示例

    我有一个 N 1 问题 我不知道如何解决它 可以在这个问题的底部找到完全可重复的样本 因此 如果您愿意 请创建数据库 设置 NUnit 测试和所有附带的类 并尝试在本地消除 N 1 这是我遇到的真实问题的匿名版本 众所周知 这段代码对于帮助
  • 当模板类不包含可用的成员函数时,如何在编译时验证模板参数?

    我有以下模板struct template
  • FCM onMessageReceived 应用程序运行时返回空白消息和标题

    正如您在标题中所写 当应用程序关闭时 它运行良好 并且onMessageReceived获取消息正文和标题 但如果应用程序处于前台模式 运行模式 则可以发送通知 但没有消息和标题 请问该怎么办 代码 Override public void
  • 耐用功能是否适合大量活动?

    我有一个场景 需要计算 500k 活动 都是小算盘 由于限制 我只能同时计算 30 个 想象一下下面的简单示例 FunctionName Crawl public static async Task
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public
  • android ndk 硬件调试内存

    背景 我对 C 很有经验 对 Android 和 Java 还很陌生 但这是编程的环境问题 我已经用 ANSI C 开发了一个管理应用程序 可以移植到任何操作系统 只需在依赖于操作系统的代码中添加 UI 即可 它使用相当多的内存 特别是对于

随机推荐