Problem bei Auslesen pipe

  • Hallo,


    wer kann mir bei meinem kleinen Problem helfen?


    Ich habe ein Kommando, welches sich nicht beendet (z. B. '/etc/init.d/vdradmin restart') mit dem Prgramm:



    bleibe ich in der Schleife, bis der Watchdog den VDR neu startet.


    Kann ich bevor ich fgets aufrufe festellen ob überhaut noch Daten geliefert werden?


    Hardy

    Suche: 6 Richtige für die nächste Lottoziehung
    PS: Wer Rechtschreibfehler findet, darf sie behalten!

  • Hi!


    Da ich Pipes normalerweise nur als Filenummern statt als Streams benutze (wodurch man das ganze generell besser steuern kann) kann ich erstmal nur raten. Das müsste aber an sich auch funktionieren:


    Du müsstest das File non-blocking setzen (das heisst Leseaufrufe warten nicht auf Daten, wenn keine verfügbar sind). Mit Streams ginge das wie folgt:


    fcntl(fileno(p), F_SETFL, O_NONBLOCK);


    Dann würde fgets 0 zurückgeben anstatt zu warten, wenn keine Daten anliegen. Mit feof(p) könntest Du dann überprüfen, ob nur keine Daten geliefert wurden, oder ob der Prozess sich beendet hat.


    BTW: pclose() wartet selbst auch, bis der Prozess sich beendet hat, also würde dann Dein Code an einer späteren Stelle warten.


    Zur Vollständigkeit hier das ganze nochmal mit Filenummern statt Streams:


  • Hallo LordJaxom,


    erst einmal vielen Dank für Deine Hilfe. Mit fcntl funktionierte auch prima.


    Nur das Programm, welches ich starte (wget) sendet seine Ausgaben nach stderr statt stdout, so das mein Programm vergeblich auf Daten wartete.


    Gibt es eine Möglichkeit auch stderr von einen selbst gestartenen Prozess auszulesen? Mit Pipe wird ja nur stdin und stdout verbunden ...


    Hardy

    Suche: 6 Richtige für die nächste Lottoziehung
    PS: Wer Rechtschreibfehler findet, darf sie behalten!

Jetzt mitmachen!

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