2012-12-16 52 views
3

所以我有這個Java程序創建在終端上運行某個C程序的進程(unix),並且當C程序發生某些事情時(在終止之前)我需要通知Java程序)。我怎樣才能做到這一點?我知道我會需要信號,但我對這個主題沒有太多經驗。發送信號從C到Java

在此先感謝!

編輯:這是我對Java所做的更改,調用過程後:

  InputStream stdout = p.getInputStream(); 
      InputStreamReader isr = new InputStreamReader(stdout); 
      BufferedReader br = new BufferedReader(isr); 
      String line = null; 
      System.out.println("<INPUT>"); 
      while ((line = br.readLine()) != null) 
       System.out.println(line); 
      System.out.println("</INPUT>"); 
      int exitVal = p.waitFor(); 
      System.out.println("Process exitValue: " + exitVal); 

我什麼我,當我想通知的Java的C所做的:

char buff[20]; 
size_t nbytes; 
ssize_t bytes_written; 
int fd; 
strcpy(buf, "This is a test\n"); 
nbytes = strlen(buf); 
bytes_written = write(1, buff, nbytes); 

但運行後我只能得到:

INPUT 
/INPUT 
Process exitValue: 0 
+0

使用此http://stackoverflow.com/questions/13904318/reading-作爲一個例子的a-substring-from-a-string-value,它似乎是做你想做的事,試試吧 –

回答

1

您可以使用c程序創建一個套接字並將其發送到java套接字服務器。你可以搜索goole來找出樣本。

4

的方法之一是閱讀你的C程序的stdout

Process p = Runtime.getRuntime().exec("c.exe"); 
    InputStream stdout = p.getInputStream(); 

現在C程序可以跟Java程序

+1

問題很模糊,但這可能是要走的路。一個「陷阱」就是刷新,當C程序沒有交互式控制檯時,可能會默認爲「僅當非常大的緩衝區已滿時」。 – hyde

+1

對,它只是一個提示,在哪裏尋找答案 –

+1

是的,如果你不知道它,這只是非常煩人。你從命令行測試程序,一切正常,然後你從另一個程序執行它,並得到沒有輸出,然後梳理你的程序,以找到一種不存在的錯誤... – hyde

1
一個Java程序,並通過它催生了另一個程序之間進行通信

最簡單的方法是使用在啓動子進程時設置的FIFO流。因此,例如,如果您使用Runtime.exec()或使用ProcessBuilder啓動子流程,那麼您的對象類型爲Process。通過調用getInputStream(),你可以訪問進程的標準輸出。

在本地代碼中,只需將信號輸出到標準輸出,並且可以由Java進程讀取它們。

+0

是的,我在java中使用Runtime.exec()。所以我只是在C prog中使用write()函數? – danielnovais92

+0

是的,'寫'然後'沖洗'應該做的伎倆。在Java方面,只需從輸入流中執行'read()'。 – onon15