java - JNI/JNA 与 Runtime.getRuntime().exec(String)?

标签 java shell java-native-interface runtime jna

据我所知,我可以在命令 shell 中执行的任何操作,都可以通过 JNI、JNA 或 Runtime.getRuntime().exec(String) 执行。那么什么时候使用哪个?

JNI/JNA 是否允许我与正在运行的 native 应用程序进行通信(进程间通信等),否则无法从命令 shell 执行该应用程序?或者只是 Runtime.getRuntime().exec(String) 是平台无关的,而 JNI/JNA 要求您知道您所在的平台才能使用它们?

最佳答案

简而言之,

  • JNI 和 JNA 允许在同一进程中使用 native
  • Runtime.exec(及其新 friend ProcessBuilder)启动新的外部应用程序。

由于每个都需要与主机操作系统和现有的 native 二进制文件(无论是库还是可运行的程序)合作,所以它们都不是平台无关的。

这三个都不允许与正在运行的外部应用程序进行通信。为此,您需要 inter-process communication机制,例如可以在共享内存、文件、管道或套接字之上实现。

关于java - JNI/JNA 与 Runtime.getRuntime().exec(String)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20499326/

相关文章:

java - 获取从 JNI 方法返回的直接缓冲区对象的数据到 Java?

用于帧的动画 API?

java - 重命名所有 JSON 键 - Java - Jackson - spring boot

java - 强制一个类覆盖 .equals 方法

json - 使用 jq 从数组中选择特定项目

linux - linux shell 中连字符 ("-") 的用法是什么?

c - 需要帮助将命令行 ";"选项实现到 C-Shell 脚本中

android - 如何在android 2.1上从sd卡加载jni?

java - 在测试用例中使用 if/switch/for 条件

java - JNI 线程导致 SIGSEGV Cypress fx2lp USB 芯片