gpt4 book ai didi

java - 从 Java 使用命令行参数调用 C 程序

转载 作者:太空宇宙 更新时间:2023-11-04 08:02:14 25 4
gpt4 key购买 nike

我想将参数从我的 java 程序传递到作为命令行参数执行的 C 程序。这是我的 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");
}
}

这是我从终端编译时得到的输出。

lclab@lclab:~/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();
}
}

关于java - 从 Java 使用命令行参数调用 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45585841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com