Ich habe eine Java-Anwendung, die hier eine C++ App über die java.lang.Process API startet und dann versucht, Befehle, um es über das stdin Rohr zu senden:Kommunikationsproblem zwischen Java und C++ App auf stdin
process.getOutputStream().write("foo\n"); process.getOutputStream().flush();
Auf der C++ - Seite gibt es eine Schleife läuft, die für die Eingabe in Stdin überprüft und wenn es es liest es. Leider gibt die Überprüfung immer 0 zurück, daher versucht es nie zu lesen. Wenn ich den Check entferne, werden plötzlich die Befehle angezeigt und verarbeitet. Dies ist auf Linux.
Der C++ Anwendungen Code und von stdin lesen zu überprüfen, ist dies:
fd_set fds; FD_ZERO (&fds); FD_SET (0, &fds); struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 0; if(select (1, &fds, 0, 0, &tv) > 0) { char buf[16384]; buf[16383] = '\0'; if (fgets (buf, sizeof (buf) - 1, stdin) == 0) return; }
Wie gesagt, das Entfernen der if-Klausel macht es Arbeit, aber natürlich das ist nicht so schön wie die Schleife um es auch tut einige andere Dinge. Hat jemand eine Idee, was ich hier falsch mache?
Update: Inzwischen konnte ich das Problem mit zwei sehr kleinen Beispiel-Apps reproduzieren. Das Problem scheint hier mit dem Qt-Framework in Verbindung zu stehen, sobald ich die QCoreApplication-Instanz für das Framework erstellt habe, scheint select() für stdin nicht mehr zu funktionieren.
sollte verwenden ' fgets (buf, sizeof (buf), stdin) 'nicht' sizeof (buf) - 1' – user102008