尝试使用 Java 的流程构建器调用 C 程序,但不知道在流程构建器调用中调用什么。
Process p = new ProcessBuilder("myCommand", "myArg").start();
Run Code Online (Sandbox Code Playgroud)
对于myCommandand myArg,我会用什么值替换它来运行 C 程序?我希望它调用的程序如下所示:
计算器.c:
#include <stdio.h>
int main ()
{
int a = 4;
int b = 2;
int c = a + b;
printf("Result: %d \n", c);
}
Run Code Online (Sandbox Code Playgroud)
如果calculator.c 还没有被编译,你需要先编译它:
Process compile = new ProcessBuilder("gcc", "calculator.c").start();
Process execute = new ProcessBuilder("./a.out").start();
Run Code Online (Sandbox Code Playgroud)
任何相关的编译器标志(例如,-O或-o calculator)也应包含在参数中。如果您确实重命名了可执行文件,那么您将希望对其进行更改./a.out。
更好的方法(就几乎没有硬编码常量而言)是使用一些变量,例如:
String c_file = "calculator.c";
String output_exe = "calculator";
Process compile = new ProcessBuilder("gcc", "-o " + output_exe, c_file).start();
Process execute = new ProcessBuilder("./" + output_exe);
Run Code Online (Sandbox Code Playgroud)
最后,您可能希望确保您的每个进程都没有错误地退出:
if (compile.getInputStream().read() == -1) {
// that means something was written to stderr, and you can do something like
System.out.error("ERROR!");
System.exit(-1);
}
Run Code Online (Sandbox Code Playgroud)
正如@VinayDandekar 指出的那样,您也可以使用exitValue.
if (compile.exitValue() == -1) {
// that means something was written to stderr, and you can do something like
System.out.error("ERROR!");
System.exit(-1);
}
Run Code Online (Sandbox Code Playgroud)