2017-08-09 81 views
-1

我想將我的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。

+0

您需要先編譯您的C程序,然後_運行生成的可執行文件。 – Mat

回答

1

編譯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(); 
     } 
    } 
+0

非常感謝您的快速回答。我已經執行了C程序。並改變了路線。但仍然返回-1 –

+0

嘗試執行您的可執行文件,轉到'/ home/lclab/Desktop/jni',在這裏打開終端並寫入'./test param1',它運行正確嗎? –

+0

是它的執行。 lclab @ lclab:〜/ Desktop/jni $ g ++ test.c -o test lclab @ lclab:〜/ Desktop/jni $ ./test param1 提供的參數是param1 –