2017-02-17 6 views
0

Ich verwende einen c-Prozess, um eine serielle Schnittstelle zu hören und sie an ein Java-Programm zu senden, um die Daten zu bearbeiten.Muss ich ein Fifo aufheben, bevor ich es lesen kann?

Ich führe das c-Programm, das einen Anruf an mkfifo() macht, blockiert es und wartet auf das Java-Programm, um das andere Ende zu öffnen.

Sobald das Java-Programm das andere Ende öffnet, tritt das c-Programm in eine Schleife ein, liest von der seriellen Schnittstelle und ruft write(fd) mit dem Dateideskriptor auf.

Das Java-Programm erhält die Daten nicht, bis ich den C-Prozess beenden, oder der C-Prozess ruft unlink() auf.

Ist dies die einzige Möglichkeit, Daten zu übertragen? Muss ich eine Nachrichtenwarteschlange verwenden, wenn ich sie offen lassen möchte?

Aus meiner Forschung scheint es, dass write nicht gepuffert ist, also muss ich nichts tun, wie fflush für wenn ich einen Dateizeiger verwendet, aber dann warum sendet es nicht?

+0

Wenn das C-Programm mit 'write()' in den FIFO schreibt, dann sollten die Daten dort für das Java-Programm bereit sein zu lesen, und das Problem ist "Was ist das Java Programm machen "? Sie können dies demonstrieren, indem Sie ein C-Programm verwenden, um den FIFO anstelle von Java zu lesen; Führen Sie 'cat/path/to/FIFO' aus, um es zum Beispiel zu lesen. Sie sollten den FIFO nicht aufheben müssen. Möglicherweise müssen Sie es erneut öffnen. Wenn Sie lesen und keine Schreiber vorhanden sind, müssen Sie schließen und erneut öffnen, bevor Sie weitere Daten erhalten. Es könnte ein ähnliches Problem geben, wenn Sie schreiben. –

+0

Sie haben recht, Katze arbeitet, also ist es wahrscheinlich das Java-Ende. Ich werde es mir ansehen, wenn ich eine Chance bekomme und sehen, was dort vor sich geht. –

Antwort

-1

haben Sie gebunden, um das O_ASYNC-Flag auf dem Leseende zu setzen?

+0

Entschuldigung, aber ich habe kommentiert ... nicht beantwortet ... – borodin

0

Es stellte sich heraus, dass ich bufferedreader.readLine() anstelle von nur read verwendet habe. Ändern zum Lesen mit einem Puffer behoben

Verwandte Themen