2009-08-03 9 views
0

Ich muss ein Handshake-Protokoll in einem kleinen Linux-Programm, das Named Pipes verwendet, um mit anderen Prozessen kommunizieren zu implementieren. Ich habe nach einem allgemeinen Implementationsmuster für ein Handshake-Protokoll gesucht, wenn ich named pipes benutze, aber ich konnte nichts umdrehen ...Wie ist ein "Handshake" allgemein in Bezug auf Named Pipes implementiert

Ich kann einfach nicht glauben, dass es keine Muster zu tun gibt Dies. Kann mich jemand auf eine mögliche Ressource hinweisen?

In voller Offenlegung ist dies für Hausaufgaben, aber die Umsetzung dieses Musters ist nicht die Hausaufgaben. Wir müssen ein Problem innerhalb des Hausaufgabencodes lösen und ich halte dies für eine mögliche Lösung. Die Hausaufgaben werden in C++ umgesetzt - aber die Sprachen sind mir egal. Ich will nur nicht das Rad neu zu erfinden ....

aktualisieren: Ich habe das Gefühl, dass diese mit Signalen umgesetzt werden könnte.

Was ich damit meine Handshake ist, dass ein Kind Prozess Berichte es übergeordneten Prozess, der es für die Arbeit fertig ist, aber geht nicht (auch wenn es etwas in das Rohr ist), bis die Eltern das Signal unterwegs gibt . In meiner Arbeitstheorie werde ich viele untergeordnete Prozesse haben, die bereit und für das Go-Signal vom Elternteil melden müssen.

+1

Das Buch "Advanced Programming in a Unix Environment" ist ein erstaunliches Buch, das die umgebenden Probleme in großer Tiefe behandelt. Es ist sein Gewicht in Silber (wenn nicht Gold) wert. – gahooa

+0

Nebenbei bemerkt verstehe ich jetzt, warum ich nichts zu diesem Thema gefunden habe. * Es ist eine sehr ungewöhnliche Verwendung für diese Technologien .... * –

Antwort

2

In typische Nutzung, sind die Prozesse auf Handshake blockieren. Der Writer-Prozess öffnet die Pipe zum Schreiben, der Reader-Prozess öffnet die Pipe zum Lesen, und je nachdem, was zuerst passiert, blockiert der andere Prozess seine Seite. Dies kann erweitert werden, um nicht-blockierende IO auf der Leserseite zu verwenden.

Named Pipes sind am nützlichsten für One-to-One-IPC. In Ihrer Eins-zu-Viele-Situation sollten Sie wahrscheinlich stattdessen einen UNIX-Domain-Socket verwenden.

+0

Diese Hausaufgabe hat mit Named Pipes zu tun .... Also ich bin mit der gegebenen Architektur fest .... –

+0

Nun, Sie brauchen wirklich eine Pipe pro Kind-Prozess (zwei, wenn Sie bidirektionale Kommunikation wollen). Wenn Sie dies tun, können Sie einfach nur alle Pipes einzeln öffnen, und nachdem alle open() -Aufrufe zurückgegeben wurden, weiß es, dass alle untergeordneten Prozesse ausgeführt werden und auf ihre Arbeit warten. – caf

+0

Ich denke, Sie haben Recht .... Vielen Dank für Ihre Antwort. –