跳转至内容

调用 C

75% developed
来自维基教科书,一个开放的世界中的开放书籍

导航 高级 主题: v  d  e )


您可以使用 Runtime.exec() 方法在运行的 Java 应用程序中调用程序。Runtime.exec() 还允许您对程序执行操作,例如控制程序的标准输入和输出,等待其完成执行,以及获取其退出状态。

这是一个简单的 C 应用程序,说明了这些功能。此 C 程序将从 Java 中调用

#include <stdio.h>

int main() {
    printf("testing\n");
    return 0;
}

此应用程序将字符串“testing”写入标准输出,然后以 0 的退出状态终止。要执行此简单程序,请在 Java 应用程序中编译 C 应用程序。

Computer code 编译
$ cc test.c -o test

然后使用以下 Java 代码调用 C 程序

Computer code 代码清单 10.2:调用 C 程序。
import java.io.InputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.InterruptedException;
import java.io.Process;
import java.io.Runtime;

import java.util.ArrayList;

public class ExecDemo {
    public static String[] runCommand(String cmd) throws IOException {
        // --- set up list to capture command output lines ---
        ArrayList list = new ArrayList();

        // --- start command running
        Process proc = Runtime.getRuntime().exec(cmd);

        // --- get command's output stream and
        // put a buffered reader input stream on it ---
        InputStream istr = proc.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(istr));

        // --- read output lines from command
        String str;
        while ((str = br.readLine()) != null) {
            list.add(str);
        }

        // wait for command to terminate
        try {
            proc.waitFor();
        }
        catch (InterruptedException e) {
            System.err.println("process was interrupted");
        }

        // check its exit value
        if (proc.exitValue() != 0) {
            System.err.println("exit value was non-zero");
        }

        // close stream
        br.close();

        // return list of strings to caller
        return (String[])list.toArray(new String[0]);
    }

    public static void main(String args[]) throws IOException {
        try {

            // run a command
            String outlist[] = runCommand("test");

            // display its output
            for (int i = 0; i < outlist.length; i++)
                System.out.println(outlist[i]);
        }
        catch (IOException e) {
            System.err.println(e);
        }
    }
}

演示调用了一个方法 runCommand 来实际运行程序。

Example 代码部分 10.1:运行命令。
String outlist[] = runCommand("test");

此方法将输入流挂钩到程序的输出流,以便它可以读取程序的输出,并将其保存到一个字符串列表中。

Example 代码部分 10.2:读取程序的输出。
InputStream istr = proc.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(istr));
             
String str;
while ((str = br.readLine()) != null) {
    list.add(str);
}

将 C 迁移到 Java

[编辑 | 编辑源代码]

存在工具可以帮助将现有项目从 C 迁移到 Java。一般来说,自动翻译工具分为两种不同的类型

  • 一种将 C 代码转换为 Java 字节码。它基本上是一个创建字节码的编译器。它与任何其他 C 编译器具有相同的步骤。另见 C 到 Java JVM 编译器.
  • 另一种将 C 代码转换为 Java 源代码。这种类型更复杂,并使用各种语法规则来创建可读的 Java 源代码。对于希望将 C 代码迁移到 Java 并留在 Java 中的人来说,此选项是最好的。


Clipboard

待办事项
添加一些示例。



华夏公益教科书