Java运行时执行C语言程序无法获得输出
我编写了一个简单的C程序,并将其编译为“AskStack.exe” 但我失败了。java程序没有输出任何内容。 我注意到,如果我删除C程序的getchar(),它将获得输出。 但我的目的是与C程序交互Java运行时执行C语言程序无法获得输出,java,c,exec,Java,C,Exec,我编写了一个简单的C程序,并将其编译为“AskStack.exe” 但我失败了。java程序没有输出任何内容。 我注意到,如果我删除C程序的getchar(),它将获得输出。 但我的目的是与C程序交互 那么我应该如何修改我的java代码呢?提前感谢。以下是正在发生的事情 Java程序启动AskMe.exe程序 AskMe.exe将一行写入stdout的输出缓冲区 AskMe.exe调用getChar,阻止在其标准输入上等待字符 同时 Java程序试图从子进程的标准输出中读取一行 死锁 问题是As
那么我应该如何修改我的java代码呢?提前感谢。以下是正在发生的事情
getChar
,阻止在其标准输入上等待字符- 您可以删除
调用getChar()
- 您可以在
之后显式刷新printf
流。(但这只是将bug转移到另一个地方。Java程序现在将读取并打印“hello world”消息,然后等待子进程退出……这是永远不会发生的。)stdout
- 您可以修改Java程序,将字符写入子进程标准输入。如果不修改AskeMe.exe,则必须在Java程序尝试从子项读取之前完成此操作。。。否则你会再次陷入僵局
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello world!\n");
getchar();
return 0;
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Test {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Process p = Runtime.getRuntime().exec("AskStack.exe");
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
do{
line = reader.readLine();
System.out.println(line);
}while(line != null);
p.waitFor();
}
}