Comunique-se com o programa C usando Java Stdin / Out

Eu quero que meu programa Java se comunique com um programa C. Este é apenas um exemplo simples, mas eu não posso fazer isso funcionar. Supõe-se que o programa Java executa o programa C e grava em seu fluxo de entrada. O programa C deve ver isso e escrever em stdout como uma resposta. Finalmente, o programa Java deve ler esta resposta a partir da saída padrão do programa C e imprimi-lo na tela.

Ao executar o programa C da linha de comando, obtenho o comportamento desejado. No entanto, ao executar do programa Java, simplesmente “desligar” e não faz nada. O programa Java parece ter escrito sua mensagem no stdin do programa C, mas esta mensagem não é vista no programa c.

Eu configuro o programa C para que você escreva a mensagem que você lê O arquivo apenas para verificar que lê a mensagem, e isso não acontece.

Aqui está o programa C:

#include <stdio.h>#include <string.h>void hello();void wrong();int main() { char buff; /* 1. read stdin */ fscanf(stdin, "%s", buff); /* side effect - if message was received it should be printed to file */ FILE *fp = fopen("file.txt", "w"); fprintf(fp, "%s", buff); fclose(fp); /* 2. depending on message, write something to stdout */ if(strcmp(buff, "hello") == 0) { hello(); } else { wrong(); }}void hello() { printf("Hello World!");}void wrong() { printf("WRONG!");}

e aqui é 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); }}

Quando executar o principal, recebo o seguinte resultado:

$ java Main done writing: hello

e, em seguida, um cursor piscando e o arquivo “file.txt” não está escrito, indicando que o programa C não leu “Olá” de Stdin.

Este é um exemplo simples, então eu acho que Estou me perdendo algo simples ou estou errado de alguma forma.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *