IPC POSIX message-queue

Gast #5098146
Hallo Zusammen,
ich suche ein gutes Tutorial zu Posix messages queues.

Dabei bin ich auch 
https://www.uninformativ.de/blog/postings/2016-05-16/0/POSTING-de.html 
und auf 
http://openbook.rheinwerk-verlag.de/linux_unix_programmierung/Kap09-005.htm#RxxKap09005040002D81F03B100 
gestoßen.

Beide unterscheiden sich aber. So verwendet das erste Beispiel ganz 
andere header wie mqueue.h und das andere msg.h. Aber welches Beispiel 
ist sinnvoller bzw. besser? Bin da etwas verwirrt.
#5099091
Pascal schrieb:
> Hallo Zusammen,
> ich suche ein gutes Tutorial zu Posix messages queues.
>
> Dabei bin ich auch
> https://www.uninformativ.de/blog/postings/2016-05-16/0/POSTING-de.html
> und auf
> 
http://openbook.rheinwerk-verlag.de/linux_unix_programmierung/Kap09-005.htm#RxxKap09005040002D81F03B100
> gestoßen.
>
> Beide unterscheiden sich aber. So verwendet das erste Beispiel ganz
> andere header wie mqueue.h und das andere msg.h. Aber welches Beispiel
> ist sinnvoller bzw. besser? Bin da etwas verwirrt.

Sie unterscheiden sich, weil es zwei unterschiedliche Arten von 
Message-Queues sind:

a) Posix_Message_Queues, optional, sind unter der Option 
_POSIX_MESSAGE_PASSING verfügbar

b) XSI-Message-Queues (ehem. SysV-Message-Queues), optional, unter der 
Option _XOPEN_UNIX

Sie stammen historisch aus unterschiedlichen Strömungen und haben 
deswegen auch eine andere Schnittstelle. Zudem haben sie auch 
unterschiedliche Eigenschaften, das kommt jetzt drauf an, was man will 
...
Gast #5099245
Vielen Dank vorab. Ich habe folgendes Beispiel ausprobiert: 
https://www.uninformativ.de/blog/postings/2016-05-16/0/POSTING-de.html

Die Frage ist jetzt, wie ich als Empfänger (entspricht Server?!) eine 
Schleife einbaue, um den nachrichtenfluss zu überwachen und neue 
Nachrichten gleich abzurufen? Eine Endlosschleife bringt mit nichts, 
weil ich eigentlich beim Start aus der Konsole "./recv /queuename ..." 
den Queuenamen angeben muss. Hat da jemand eine Idee? Bin hierbei leider 
unerfahren ...
Gast #5099346
Das verlinkte Tutorial ist sehr kompakt und bietet lediglich die 
Möglichkeit, als Sender (Client) eine "Queue" zu erstellen und eine 
Nachricht abzulegen. Mit dem Code des Empfängers (Server) kann durch 
Angabe des "Queue-namens" als Parameter die Nachricht abgerufen werden.

Gerne möchte ich das Ganze mit einer Schleife automatisieren, dass 
sozusagen neue Nachrichten in einer Queue oder Nachrichten von neuen 
Queues abgerufen werden. Gibt es da sinnvolle beispiele?
#5099361
Pascal schrieb:
> Das verlinkte Tutorial ist sehr kompakt und bietet lediglich die
> Möglichkeit, als Sender (Client) eine "Queue" zu erstellen und eine
> Nachricht abzulegen. Mit dem Code des Empfängers (Server) kann durch
> Angabe des "Queue-namens" als Parameter die Nachricht abgerufen werden.
>
> Gerne möchte ich das Ganze mit einer Schleife automatisieren, dass
> sozusagen neue Nachrichten in einer Queue

dann mach das doch

> oder Nachrichten von neuen
> Queues abgerufen werden.

Das Iterieren über mehrere PosixMQs nicht mit select()/poll() machbar, 
da es sich bei den mqd_t nicht um Dateideskriptoren handelt. Am 
einfachsten mit mehreren Aktivitätsträgern.

> Gibt es da sinnvolle beispiele?

Siehe Literaturangabe oben.
Gast #5099731
Ich habe das jetzt so gehandhabt, dass ich auf die Eingabe eines 
exit-Strings der Clients warte und dann den Server einfach anhalte bzw. 
die while-Schleife abbreche.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.