Bitte um Hilfe bei Prozess-Synchronisation

  • Hallo,


    Ich möchte (das ganze in C/C++):

    • ein anderes Programm ausführen, welches Ausgaben auf stdout und/oder stderr tätigt.
    • die Ausgaben in 'meinem' Programm mitlesen und auswerten. Wenn sich vermeiden ließe, dass die Ausgaben vom Kindprogramm auf der Konsole erscheinen wäre das einfach genial.
    • die Ausgaben des Kindprogramms auch nach dessen Ende noch haben
    • das ganze sollte möglichst für skripte und compilate gleichermaßen funktioklappen

    Das Starten des Kindprogramms soll über fork/exec erfolgen (nicht via system())


    Bin für jeden Tip dankbar!


    P.S.: Fernziel ist der Einsatz in einem VDR-Plugin - aber davon bin ich noch ziemlich weit entfernt ...

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

    Einmal editiert, zuletzt von geronimo ()

  • Ich habe mal einen alten C Quellcode aus meinem "xyz" Ordern gefischt - ist letztlich ein Telnet Client für Arme. Demonstriert "fork" oder alternativ pthread. Und halt das Ausführen von Programmen und Abfangen deren Ausgaben mit "popen".
    Hoffe das Hilft.

  • Danke ravemax und mein Beileid.
    Hoffe der Exitus hat nicht noch Nachbarn mit in die Tiefe gerissen ...


    Es wird etwas dauern, bis ich mir Dein Beispiel reinziehen kann. Dann melde ich mir nomml.

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

  • Hallo ravemax,


    Hatte doch noch kurz ( :] ) Zeit, mir Dein Programm anzuschauen.
    Ist wirklich nett, ne Funktion wie chomp in einem C-Programm zu finden!


    Der Tip mit popen geht schon in die richtige Richtung. Also für den positiven Anwendungsfall ist das genau das, was ich gesucht habe.


    Gibt's jetzt vielleicht noch nen Trick, mit dem sich Fehlermeldungen der shell unterdrücken lassen? - Wenn ich das richtig verstanden habe, macht popen intern ein fork und startet eine shell. Das Environment läßt sich so aber wohl nicht beeinflussen, d.h. der Kindprozess bekommt eine Kopie meines Environments.


    Kann man popen auch zu Fuß machen, um so z.B. das Environment zu beeinflussen? Zwischen fork und exec könnte ich das Environment vom Kindprozess ja noch aufräumen.
    Wie kann denn ein Stockwerk tiefer die Geschichte mit stdout- und stderr-Umleitung aussehen?

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

  • Zitat

    Original von geronimo
    Wie kann denn ein Stockwerk tiefer die Geschichte mit stdout- und stderr-Umleitung aussehen?


    Irgendwo habe ich schon mal ein Beispiel gesehen, wo genau das gemacht wurde -- nur leider finde ich die Stelle jetzt nicht mehr. War etwas komplizierter: kein einfaches fork oder popen. (Warscheinlich fork + Descriptoren umbiegen + exec)


    Eventuell war das aber in
    http://www.gnu.org/software/libc/manual/html_node/index.html
    oder
    http://www.erlenstar.demon.co.uk/unix/faq_toc.html


    Ulrich

  • Hey Ulrich - das war der Durchbruch! Danke!


    War mal wieder ein Verständnisproblem bei mir ;(
    Ich hatte schon vor dem Fragestellen an freopen bzw. dup gedacht, aber ich hatte einfach nicht verstanden, was dup macht. Manchmal sieht man den Wald vor lauter Bäumen einfach nicht. Mit Beispiel werden auch die letzten Klarheiten ausgeräumt :D


    Nochmals Danke!


    P.S. Ach ja, das Beispiel gibts hier.

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

    Einmal editiert, zuletzt von geronimo ()

Jetzt mitmachen!

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