2016-12-20 2 views
1

Ich habe ein Programm in C++, das eine Schleife wie folgt ausführt, Frames von einem Videogerät ergreifend, mit einem proprietären Treiber, auf den ich keinen Zugriff habe.C++ Stream-Schnittstelle in Linux

Ich möchte einige Logik mit anderen Programmiersprachen erstellen, also dachte ich über die Verwendung der folgenden Schnittstelle nach. (Ich brauche nur Linux-Unterstützung) Ich dachte an eine Datei irgendwo, wie: /my/video/device Und jedes Mal, wenn ich read() darauf anrufe, würde es mir den aktuellen Rahmen geben. Wenn ich lese() noch einmal anrufe, möchte ich, dass es blockiert, bis das nächste Bild verfügbar ist, und das für mich zurückgeben. Auch wenn ich open() nicht für eine Weile anrufe, möchte ich nicht, dass die dazwischen liegenden Frames gepuffert werden.

Was wäre der beste Ansatz? Ich habe versucht, FUSE zu verwenden, um ein Dateisystem zu implementieren, aber es wurde versucht, innerhalb der Datei zu suchen, wenn es sich um eine reguläre Datei handelte, und ich würde nur bis zu der Größe lesen, die ich für die Datei angegeben hatte. Ich machte dann ein Zeichen Gerät, aber es würde nie meine read() Funktion aufrufen, stattdessen würde es sagen, Berechtigung verweigert ...

Ich dachte über versuchen, CUSE, oder etwas in die Richtung. Bin ich über Dinge kompliziert? Ich muss nur mit einem Strom von Frames arbeiten können, die ständig aus meiner C++ - Schleife kommen, aber ich möchte sie in einer anderen Sprache analysieren, wie Python oder Go. Ich möchte auch nicht die Kompilierung meines C++ Codes mit Go oder Python mischen, ich möchte, dass die beiden vollständig getrennt sind. Ich dachte, eine Art von Datei-API zwischen den beiden würde die Dinge erleichtern. Was wäre ein guter Weg, damit umzugehen?

+0

Ist ein Named Pipe, die Art von Ding, die Sie suchen? –

+0

@Zekian Ich versuchte Named Pipes, aber wenn das Empfangsende trennt meine Schleife existiert. Ich muss in der Lage sein, die Leitung anzuschließen und von ihr zu trennen. –

Antwort

0

Ich würde das Programm mit Named Pipes schreiben. Eine Sache zu beachten ist, dass, wenn das empfangene Ende in der Mitte eines Schreibvorgangs getrennt wird, der Server ein SIGPIPE-Signal empfangen wird und wenn dieses Signal nicht behandelt oder blockiert wird, wird der Server beendet.