Nachrichten aus Konsole abfangen und weiterverarbeiten



  • Guten Tag,

    mit Hilfe der Programme rtl-sdr und multimon-ng empfange ich unter Ubuntu 16 Pocsag "Nachrichten" und entschlüssle diese. Das Programm multimon-ng gibt die entschlüsselten Nachrichten nun auf der Konsole aus. Die beiden Programme werden mit einer Pipe ( | ) verbunden in der Konsole gestartet und laufen solange, bist man sie abbricht.

    Mein Plan ist es nun die Nachrichten in c99 "abzufangen" um diese zu parsen und dann auf einer grafischen Oberfläche darzustellen.

    Welche Möglichkeiten seht ihr, um die Nachrichten aus der Konsole abzufangen?

    Das einzige, das mir bisher sinnvoll erschien, ist es die Programme mit popen zu öffnen und dann die Nachrichten einzulesen. Das würde aber bedeuten, dass man alle x Sekunden checken muss, ob eine neue Nachricht empfangen wurde. Das erscheint ineffizient. Besser wäre es, wenn eine Art interrupt ausgelöst wird, sobald eine Nachricht empfangen wird, diese dann weitergeleitet und verarbeitet wird. Ist das Möglich?

    Unter umständen bietet multimon-ng eine sinnvolle Funktion/API. Leider habe ich in die Richtung noch nichts finden können.

    Der Aufruf des multimon-ng Befehls endet mit "... -f alpha /dev/stdin".
    Was hat es damit auf sich? Vielleicht eine Möglichkeit die Nachrichten abzufangen?

    Grüße, Daniel.Golf.



  • Wenn die Programme über den Shell Pipe Operator verbunden werden kannst du deines ja einfach daziwschenschalten: statt Source | Sink schreibst du Source | DeinProgramm | Sink .
    Dein Programm muss dann einfach nur alles was auf stdin reinkommt lesen und auf stdout wieder ausgeben.



  • Dazwischenschalten bringt mir nicht viel.

    Der Befehl sieht in etwa so aus:
    rtl-sdr | multimon-ng

    Und multimon-ng gibt die Nachrichten aus, die abgefangen werden sollen.
    Theoretisch könnte ich da noch einfach mein Programm mit | programm hinterklemmen. Läuft mein Programm dann dauerhaft oder wird es nur gestartet, wenn eine Nachricht einflattert?
    Und wie sieht die entsprechende c-syntax dann aus um die Nachrichten in eine string Variable zu bekommen? über argv[] wird die Nachricht ja nicht übergeben.



  • Wie liest du denn normalerweise Texte von stdin (z.B. Tastatur) ein?


Log in to reply