Forum: PC-Programmierung IPC POSIX message-queue


von Pascal (Gast)


Lesenswert?

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.

von Wilhelm M. (wimalopaan)


Lesenswert?

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 
...

von Wilhelm M. (wimalopaan)


Lesenswert?

Pascal schrieb:
> Hallo Zusammen,
> ich suche ein gutes Tutorial zu Posix messages queues.

Immer ins "Original" schauen, also entweder

- APUE
- TLPI

von Pascal (Gast)


Lesenswert?

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 ...

von Wilhelm M. (wimalopaan)


Lesenswert?

Du sprichst in Rätseln.

von Pascal (Gast)


Lesenswert?

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?

von Wilhelm M. (wimalopaan)


Lesenswert?

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.

von Pascal (Gast)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.