【高分求教】如何在java中调用c语言程序exe

2024-11-26 12:01:47
推荐回答(3个)
回答1:

 
 
 
用 Runtime 的 exec 方法的确是可行的。

假设我们已经把以下的 C 程序编绎成 adder.exe:

#include

int main() {    /* 简单地循环打印标准输入上的两个整数之和 */
    int a, b, lineNumber = 0;
    while (scanf("%d %d", &a, &b))
        printf("Line# %d \t %d + %d == %d\n", ++lineNumber, a, b, a + b);

    return 0;
}

以下的 Java 程序可以在启动 adder.exe 后,跟 adder.exe 的标准输入和输出接轨,然后持续不断地向它发送数据和索取结果:

import java.io.*;

class C {
    public static void main(String[] args) throws Exception {

        final Process proc = Runtime.getRuntime().exec("adder.exe");

        // 用另一个线程把参数送到 proc 的标准输入上去。
        new Thread() {
            public void run() {
                OutputStream stdin = proc.getOutputStream();
                for (int i = 0; ; i++) {
                    try {
                        Thread.sleep(1);   // 要休息片刻才看得到 I/O 的缓存效果。
                        stdin.write((i + " " + i + "\n").getBytes());
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                }
            }
        }.start();

        // 主线程负责读取并打印 proc 的标准输出。
        BufferedReader stdout = new BufferedReader(new InputStreamReader(proc.getInputStream()));
        for (String line; null != (line = stdout.readLine()); )
            System.out.println(line);
    }
}

循环里的 Thread.sleep(1) 纯粹是为了凸显 I/O 的缓存效果。
我测试时看到大约 900 行的缓存量(用 32-bit XP 和 Java 1.6)。
 
 
 

回答2:

简单的说一下吧,你这个是java程序调用其他程序的问题,可以
1)Runtime.getRuntime().exec("adder.exe");
这样做,也可以指定路径和exe文件的名称,
2)也可以指定一个注册表注册了的服务

当然linux下面也是Runtime.getRuntime().exec("adder.exe");
不过就没有注册这么一说了

回答3:

你应该把你的C语言的手动操作描述出来。
主要是启动后它一次性地scanf还是循环scanf?

》》没这方面的经验,期待正解。。