fork() und pipes

  • Hallo, ich versuche 2 Kindprozesse von dem urspünglichen Prozess zu erzeugen die folgende Funktionalität haben:
    Der Vater liest zeichenweise von stdin und schreibt die eingelesene Zeichen in der ersten Pipe. Das erste Kind liest von dieser Pipe die Zeichen aus und gibt diese weiter an die zweite Pipe. Das zweite Kind liest diese Zeichen von der zeiten Pipe und gibt diese auf stdout aus.

    Ich bin nicht sicher ob ich das zweite fork() an der richtigen Stelle habe, bzw. das zweite wait().

    Kompilierbar ist es problemlos aber nach der ausführung werden die zeichen nur gelesen aber nichts wird ausgegeben. Den Programm kann man auch nicht mit strg+D terminieren.

    Hat jemand eine Idee was ich da falsch mache?

    Source:

    danke für jede Hilfe.
    mfg NonSense

    Experience is what you get when you are expecting something else.
    -Ivor Horton-

  • Hmm, ich hab das Beispiel jetzt nicht so ganz genau durchgesehen, aber vielleicht liegts daran, dass du in den Prozessen die bestimmte Pipes nicht brauchen, diese nicht schließt? Probier mal, beispielsweise im Fatherprocess auch pipe2 zu schließen. Ist jetzt aber nur eine Vermutung. Hatte in Sysprog ein ähnliches Bsp, wenn ichs noch find, guck ich mal nach was ich damals geschrieben hab, sah jedenfalls ungefähr so aus.

  • Kompilierbar ist es problemlos aber nach der ausführung werden die zeichen nur gelesen aber nichts wird ausgegeben. Den Programm kann man auch nicht mit strg+D terminieren.


    Hi!

    Also ich hätt mal gesagt, dass das Problem wahrscheinlich an den Streams liegen wird, die gepuffert werden - und somit nicht direkt beim Aufruf von fputc geschrieben werden.

    Mach nach jedem Schreibvorgang ein fflush(stream) und es sollte funktionieren!
    Aja - im Fatherprocess fehlt die Fehlerprüfung beim fputc!

    lg
    Martin

    In zweifenhaften Fällen entscheide man sich für das Richtige!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!