C 프로그램에 명령을 보내고 출력을 읽는 Java 프로그램을 작성하고 있지만 출력을 실제로 읽으려고하면 멈추는 것을 볼 수 있습니다. 코드는 다음과 같습니다 나는 프로그램의 출력을 읽을 필요하면C 프로그램에서 출력을 읽을 때 BufferedReader가 멈 춥니 다.
import java.io.*;
public class EsecutoreC {
private String prg;
OutputStream stdin=null;
InputStream stderr=null;
InputStream stdout=null;
BufferedReader br;
Process pr;
public EsecutoreC(String p){
prg=p;
try {
pr=Runtime.getRuntime().exec(prg);
stdin=pr.getOutputStream();
stderr=pr.getErrorStream();
stdout=pr.getInputStream();
br=new BufferedReader(new InputStreamReader(stdout));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void sendInput(String line){
line=line+"\n";
try {
stdin.write(line.getBytes());
stdin.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public BufferedReader getOutput(){
return br;
}
}
, 나는 단지의 BufferedReader를 얻을 수 getOutput를 사용하고 난() 내의 readLine를 호출합니다. readLine 호출 후 바로 println을 넣었으므로 아무 것도 인쇄되지 않기 때문에 프로그램이 멈추는 것을 볼 수 있습니다. 또한 C 프로그램의 각 출력 행 뒤에 \ n을 추가합니다. 또한 Runtime.getRuntime(). exec()를 통해 호출 된 프로그램의 창을 표시하는 방법이 있습니까? 그래서 문자열을 보낼 때 또는 출력에서 읽을 때 다른 문제가 있는지 확인할 수 있습니다.
C 프로그램에서 fflush (stdout)를 시도해보십시오. 터미널에 전송되지 않으면 출력은 아마도 버퍼에 저장되지 않습니다. –
시도해 보니 작동하지 않았습니다. 그것은 인코딩과 관련이 있을까요? – Orgrim
br.ready()를 호출하면 어떻게됩니까? true를 반환하면 읽을 데이터가 있어야합니다. – Nick