保持C命令行应用程序在Mac应用程序包中运行

时间:2012-08-09 13:39:06

标签: c command-line bundles

我正在编写一个使用system()函数启动Java .jar文件的已编译C应用程序:

int main() {
  system("java -jar MyJar.jar");
  return 0;
}

我成功将其包装在一个可点击的应用程序包中,但是,当我双击它时,应用程序会在它有机会启动jar之前立即退出。但是,当我从命令行运行已编译的C代码时,它可以正常工作。

任何见解都将受到赞赏!

斯科特

1 个答案:

答案 0 :(得分:1)

应用程序立即退出的原因是由于以下行:

return 0;

您可能希望使用exec代替system。使用exec,您的程序将被Java进程取代,并且永远不会有机会到达return 0;行。但是,用shell脚本替换整个C progrma要容易得多:

#!/bin/sh
exec java -jar MyJar.jar

正如所写,我认为这种方法存在 no 缺点。 C程序已经产生了一个shell进程(这就是system所做的),那么为什么不首先从shell进程开始呢?

许多应用程序包使用shell脚本来执行此类操作。