java如何调用C语言程序

 我来答
广西代码民工
推荐于2016-02-26
知道答主
回答量:27
采纳率:0%
帮助的人:25.3万
展开全部
用 Runtime 的 exec 方法的确是可行的。

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

#include <stdio.h>

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)。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
767566287
2012-04-09 · 超过32用户采纳过TA的回答
知道答主
回答量:294
采纳率:100%
帮助的人:94.2万
展开全部
JNI native()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-04-09
展开全部
使用JNI。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式