Comunicare con il programma C usando Java stdin / out

Voglio che il mio programma Java comunica con un programma C. Questo è solo un semplice esempio, ma non posso farlo funzionare. Si presume che il programma Java esegui il programma C e scrive nel suo flusso di ingresso. Il programma C dovrebbe vederlo e scrivere su Stdout come risposta. Infine, il programma Java dovrebbe leggere questa risposta dall’output standard del programma C e stamparlo sullo schermo.

Durante l’esecuzione del programma C dalla riga di comando, ottengo il comportamento desiderato. Tuttavia, quando è in esecuzione dal programma Java, semplicemente “riattacca” e non fare nulla. Il programma Java sembra aver scritto il tuo messaggio nello stdin del programma C, ma questo messaggio non è visto nel programma c.

Ho impostato il programma C in modo da scrivere il messaggio che hai letto Il file solo per verificare che leggi il messaggio, e non lo fa.

Ecco il programma 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 qui Il programma Java è il programma 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 si esegue Main, ottengo il seguente risultato:

$ java Main done writing: hello

E poi un cursore lampeggiante e il file “file.txt” non è scritto, indicando che il programma C non ha letto “Ciao” di STDIN.

Questo è un semplice esempio, quindi immagino Mi sto perdendo qualcosa di semplice o sbaglio in alcun modo.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *