2*fork?



  • Ich soll an der Uni mit fork hantieren und ein Stille-Post-System implementieren. Ein Hauptprozess nimmt von der Standardeingabe einen String entgegen, ändert ein Zeichen und gibt es an seinen ersten fork weiter, der wiederum wieder ein Zeichen ändert und es an den zweiten fork weitergibt, der wiederum ein Zeichen ändert und den String zurück an das Hauptprogramm gibt.

    Leider habe ich bisher nur Programme geschrieben die maximal einmal forken. Wie kann fork1 an fork2 etwas weitergeben? fork2 muss ebenfalls vom Hauptprogramm forken. Ich weiß nicht wie ich diese beiden miteinander verbinden kann.

    Hoffe ihr könnt mir helfen.

    Nachtrag: Kommunikation via Unnamed Pipes.

    MfG SideWinder



  • Wie kann fork1 an fork2 etwas weitergeben?

    Z.B. mit Pipes. 🙂

    Ich weiß nicht wie ich diese beiden miteinander verbinden kann.

    Erstelle zwei Pipes und forke dann. Vielleicht hilft das hier. Ansonsten: Beej's Guide to Unix IPC.



  • Danke für deine Antwort, der Guide bzw. besser gesagt dein beispiel hat mir schon sehr geholfen.

    Allerdings sind noch zwei Fragen aufgetaucht:

    a) Reichen zwei Pipes? Father-Child und eine Child-Child? Oder soll die Rückkommunikation vom zweiten Child zurück zum Father nicht wieder über die erste Pipe sondern über eine neue, dritte Pipe, erfolgen?

    Nochmals zur Erinnerung: Die Kommunikation ist Father -> Child1 -> Child2 -> Father

    Damit das ganze synchron abläuft reichen mir imho 2 Pipes, aber evtl. gibt's noch einen mir unbekannten Haken.

    b) Ist der Aufruf von close() ein Soll oder gar ein Muss? Warum reicht es nicht wenn der Vater-Prozess am Ende alle Pipes die er erzeugt hat wieder schließt?

    MfG SideWinder



  • Scheinbar reichen mir zwei Pipes, es funktioniert soweit...oder gibt es da Fälle wo das schief gehen kann?

    Ich rufe nirgends close() für eine Pipe auf, ist das schlecht? Ein Problem?

    MfG SideWinder



  • SideWinder schrieb:

    Scheinbar reichen mir zwei Pipes, es funktioniert soweit...oder gibt es da Fälle wo das schief gehen kann?

    Ich rufe nirgends close() für eine Pipe auf, ist das schlecht? Ein Problem?

    MfG SideWinder

    pipes können schief gegen, wenn der Prozess die Anzahl der max. geöffnete Filedeskriptoren überschreitet, oder bei pipes die übers Filesystem laufen, wenn man die Pipedatei löscht.

    Wenn du kein close machst, übernimmt das der Kernel, wenn der Prozess endet.



  • ich dachte du willst kein informatik studieren sidewinder? meintest du doch mal oder was studierste genau?



  • hack0r schrieb:

    ich dachte du willst kein informatik studieren sidewinder? meintest du doch mal oder was studierste genau?

    Ja, ist übel gelaufen. Jetzt bin ich mitten in einem Informatikstudium gelandet.

    MfG SideWinder


Anmelden zum Antworten