用java的命令行参数调用C程序
我想将我的java程序中的参数传递给作为命令行参数执行的C程序。这是我的C程序,用java的命令行参数调用C程序
#include <stdio.h>
int main(int argc, char *argv[]) {
if(argc == 2) {
printf("The argument supplied is %s\n", argv[1]);
}
else if(argc > 2) {
printf("Too many arguments supplied.\n");
}
else {
printf("One argument expected.\n");
}
}
这是我从终端编译它时得到的输出。
[email protected]:~/Desktop/jni$ ./a.out param1
The argument supplied is param1
我想从我的java程序传递参数(param1)到这个程序。我怎样才能做到这一点?我尝试使用java进程生成器,但它总是返回-1。
try {
ProcessBuilder processBuilder =
new ProcessBuilder("gcc", "/home/lclab/Desktop/jni/test.c", "param1");
Process proc = processBuilder.start();
System.out.println(proc.getInputStream().read());
return proc.getInputStream().read();
} catch (IOException e) {
e.printStackTrace();
return 99;
}
我的机器是ubuntu。
编译C源代码,你会得到可执行文件。
g++ test.c -o test
改变这一行
new ProcessBuilder("gcc", "/home/lclab/Desktop/jni/test.c", "param1");
粘贴,而不是test.c
new ProcessBuilder("gcc", "/home/lclab/Desktop/jni/test", "param1");
可执行文件名或者使用Java native interface
编辑:
public static void CompileCprog(String filename){
File dir = new File("C://Users//JohnDoe//workspace//Project");
try {
String exeName = filename.substring(0, filename.length() - 2);
Process p = Runtime.getRuntime().exec("cmd /C gcc " + filename + " -o " + exeName, null, dir);
Process p = Runtime.getRuntime().exec("cmd /C dir", null, dir);
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
非常感谢您的快速回答。我已经执行了C程序。并改变了路线。但仍然返回-1 –
尝试执行您的可执行文件,转到'/ home/lclab/Desktop/jni',在这里打开终端并写入'./test param1',它运行正确吗? –
是它的执行。 lclab @ lclab:〜/ Desktop/jni $ g ++ test.c -o test lclab @ lclab:〜/ Desktop/jni $ ./test param1 提供的参数是param1 –
您需要先编译您的C程序,然后_运行生成的可执行文件。 – Mat