popen()



  • Hallo, ich hab folgendes Problem. Ich hab ein eigenständiges Programm, dass entweder mit exit(EXIT_SUCCESS) terminiert und "OK" auf der stdout ausgibt, oder mit exit(EXIT_FAILURE) terminiert und "FAILURE" auf der stdout ausgibt. Das hab ich soweit auch.

    Außerdem hab ich jetzt ein anderes Programm, das das oben beschriebene Programm sozusagen als Kindprozess ausführt und zwar immer wieder,solange, bis das oben beschriebene Programm mit einem Fehlercode terminiert. Dafür verwende ich popen(), da ich später noch die ausgaben vom oben beschriebenen Programm über eine Pipe weiterleiten soll, aber das ist hier erstmal egal.

    Hier mal meine bisherigen Überlegungen, ist halt nur eine Mischung aus Pseudocode und C:

    while(Abbruchbedingung ist, dass das program, das mit popen ausgeführt wird mit exit(EXIT_FAILURE) terminiert){
    
        /*Hier wird das Programm "program" ausgeführt und die stdout von "program" wird gelesen*/
        if((fp = popen("./program","r")) != NULL){
                /*hier wird die Ausgabe von program über eine Pipe an den Vaterprozess 
                weitergeleite, ist aber zur Zeit noch nicht wichtig*/
                (void) pclose(fp);
        }  
    
    }
    

    Mein Problem ist, dass ich nicht genau weiß, wie ich die Abbruchbedingung in der Schleife realisieren soll. Die Abbruchbedingung ist, wie oben schon beschrieben, dass das Program, das mit popen ausgeführt wird mit exit(EXIT_FAILURE) terminiert, sprich mit einem Fehlercode terminiert. Ich möchte also lediglich diesen Fehlercode abfragen können. Ich hab irgendwo gelesen, dass man den exit Status des jeweiligen Kindprozessen abfragen kann, aber leider weiß ich nicht wie und v.a. weiß ich nicht, ob damit wirklich nur der exit Status von "program" abgefragt wird und nicht vom ganzen if- Konstrukt. Wär echt nett, wenn ihr mir da weiterhelfen könntet.
    Ich wär für jede Hilfe dankbar.



  • Du hast die Lösung schon in deinem Code stehen. 😉

    int result = pclose(fp);
    

Anmelden zum Antworten