2015-03-13 57 views
0

在Linux中運行的C++代碼中,我需要調用外部java可執行文件「EXEC.JAR」,讓他保存結果文件「JAVA_RES.txt」,然後用C++導入這個文件來解析一些值。 我發現到現在做到這一點的唯一方法是調用系統功能C++保存並導入外部可執行結果,而不寫入磁盤

system("java -jar EXEC.JAR --input " + someInputs + " > JAVA_RES.txt"); 

這個實現的非常大的問題是,在硬盤上寫入該文件(或網絡中的共享文件系統,如我的情況...)使得實現非常緩慢(我必須將這個函數調用很多次)。 有沒有更好的方法來做到這一點?有沒有辦法將EXEC.JAR的結果保存在RAM內存中,然後用C++導入?

回答

1

是的,你可以嘗試使用使用POPEN()是這樣的:

int main(void) { 
     FILE *in; 
     extern FILE *popen(); 
     char buff[512]; 
     char s[1024]; //someInput 
     if(!(in = popen("java -jar EXEC.JAR --input " + s, "r"))){ 
      exit(1); 
     } 

     while(fgets(buff, sizeof(buff), in)!=NULL){ 
      printf("%s", buff); 
     } 
     pclose(in); 
    }