Communiquez avec le programme C à l’aide de Java Stdin / Out

Je veux que mon programme Java communique avec un programme C. Ce n’est qu’un exemple simple, mais je ne peux pas le faire fonctionner. Il est supposé que le programme Java exécute le programme C et écrit dans son flux d’entrée. Le programme C devrait voir cela et écrire sur stdout comme une réponse. Enfin, le programme Java devrait lire cette réponse de la sortie standard du programme C et l’imprimer à l’écran.

Lors de l’exécution du programme C de la ligne de commande, j’obtiens le comportement souhaité. Cependant, lorsque vous courez du programme Java, il « raccroche simplement » et ne faites rien. Le programme Java semble avoir écrit votre message dans le programme STDIN du C, mais ce message n’est pas vu dans le programme c.

i Configurez le programme C afin que vous écriviez le message que vous avez lu dans Le fichier juste pour vérifier que vous lisez le message, et ce n’est pas le cas.

voici le programme 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!");}

ICI est le programme 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); }}

Lorsque exécution principale, je reçois le résultat suivant:

$ java Main done writing: hello

et ensuite un curseur clignotant et le fichier « fichier.txt » n’est pas écrit, indiquant que le programme C n’a pas lu « Hello » de STDIN.

C’est un exemple simple, alors je suppose que je suppose que Je me perds quelque chose de simple ou je me trompe de quelque manière que ce soit.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *