2012-12-16 51 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