2013-06-21 34 views
0

我有一個C可執行文件,我可以從CYGWIN運行它。我也想從JAVA運行相同的文件。 C程序通過stdin和stdout獲取輸入和輸出。它主要獲取字符串並輸出字符串。與C可執行文件通信從Java

我想我可以成功地使用流程構建器啓動程序。但是我無法與C程序交互。要啓動.exe我使用ProcessBuilder,請參閱以下內容。

Process cmd = new ProcessBuilder("path to exe").start(); 

我的C程序的主要方法是在這裏:

int main(argc, argv) 
{ 
/* set command line or config file parms */ 
config(argc, argv); 
/* read grammar, initialize parser, malloc space, etc */ 
init_parse(dir, dict_file, grammar_file, frames_file, priority_file); 
/* for each utterance */ 
while(fgets(line, LINE_LEN-1, fp)) { 
/* assign word strings to slots in frames */ 
parse(line, gram); 
/* print parses to buffer */ 
for(i= 0; i < num_parses; i++) 
print_parse(i, out_ptr, extract, gram); 
/* clear parser temps */ 
reset(num_nets); 
} 
} 

我的目標是將輸入發送和從Java得到的輸出。

回答

0

您需要在繼續之前開始閱讀關於JNI的內容。谷歌是你的朋友。

坦率地說,你的主要C方法很簡短。你爲什麼不想用Java寫這個呢?

+0

此代碼執行用C語言編寫的解析器。我需要以某種方式與解析器通信,這是與它通信的接口。 –

0

其他不錯的庫允許簡單訪問本機文件是JNA。也許Runtime班可能會幫助你。

1

如果你只需要stdinput /輸出,那麼你可以使用一個System.execProcessBuilder某種形式很容易適當的流。

後,只是產生的輸出和輸入解析,但提防。輸入和輸出流通常應該在不同的線程中處理。否則,很容易出現死鎖,因爲大多數程序不會希望將stdin和stdout綁定到單個進程(例如,當您仍在嘗試寫入stdin流時,stdout會填充您的輸入緩衝區。被阻止等待程序閱讀更多,它不會因爲它的寫入被阻止等待你閱讀更多。經典。)

小心線程,但玩得開心!