Comunícate co programa C usando Java Stdin / Out

Quero o meu programa Java para comunicarse cun programa C. Este é só un exemplo sinxelo, pero non podo facelo funcionar. Suponse que o programa Java executa o programa C e escribe no seu fluxo de entrada. O programa C debería ver isto e escribir en STDOUT como resposta. Finalmente, o programa Java debería ler esta resposta da saída estándar do programa C e imprimirla na pantalla.

Ao executar o programa C da liña de comandos, obtivo o comportamento desexado. Non obstante, ao correr do programa Java, simplemente “colgar” e non facer nada. O programa Java parece escribir a súa mensaxe no STDIN do programa C, pero esta mensaxe non se ve no programa C.

Eu configurar o programa C para que escriba a mensaxe que leu en O ficheiro só para comprobar que le a mensaxe e non.

Aquí está o programa C:

e aquí é o programa Java:

import java.io.*;public class Main { public static void main(String args) { try { // 1. run C program Process proc = Runtime.getRuntime().exec("./hello"); InputStream in = proc.getInputStream(); OutputStream out = proc.getOutputStream(); // 2. write 'hello' to 'hello' program writeToProc(out, "hello"); // 3. read response readFromProc(in); } catch(Exception e) { e.printStackTrace(); } } // write message to process public static void writeToProc(OutputStream out, String msg) throws IOException { byte buff = msg.getBytes(); out.write(buff); out.flush(); System.out.println("done writing: " + new String(buff)); } // read stdin of process public static void readFromProc(InputStream in) throws IOException { byte buff = new byte; int read = in.read(); for(int i=0; read != -1; i++) { read = in.read(); buff = (byte) read; } String str = new String(buff); System.out.println("proc says: " + str); }}

Cando Run Main, eu recibín o seguinte resultado:

$ java Main done writing: hello

e despois un cursor intermitente eo ficheiro “File.txt” non está escrito, indicando que o programa C non leu “Hola” de STDin.

Este é un exemplo sinxelo, entón eu creo Estou perdendo algo sinxelo ou estou mal de calquera xeito.

Deixa unha resposta

O teu enderezo electrónico non se publicará Os campos obrigatorios están marcados con *