Wie man den Rückgabewert eines Programms lief über die Berufung eines Mitglieds der exec-Familie von Funktionen?
Ich weiß, dass es möglich ist zu Lesen-Befehle output mit einer pipe? Aber was über das return-Wert ? Zum Beispiel möchte ich ausführen:
execl("/bin/ping", "/bin/ping" , "-c", "1", "-t", "1", ip_addr, NULL);
Wie bekomme ich den Rückgabewert von ping-Befehl, um herauszufinden, ob es zurückgegeben 0 oder 1?
Danke Euch allen für Eure nützlichen und schnellen Antworten.
InformationsquelleAutor skujins | 2010-04-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein Beispiel schrieb ich vor langer Zeit. Im Grunde genommen, nachdem Sie Gabel-ein Kind-Prozess, und Sie
wait
seinen exit-status überprüfen Sie den status mit zwei Makros.WIFEXITED
wird verwendet, um zu überprüfen, ob der Prozess beendet normalerweise, undWEXITSTATUS
überprüft, welche die zurückgegebene Zahl wird in Fall ist es wieder normal:Anstelle von exit(Nummer) schreiben Sie Ihre exec.
aber execl() keinen return-Wert, ausser wenn es fehlschlägt, daher ping-Befehl gibt 0 oder 1
Als Let_Me_Be gesagt, Sie schreiben Ihre
exec
im ersten block. Sie erhalten den status vonping
im zweiten block, da schrieben wirwait(&statval)
. Vergessen Sie nicht, dass die oben genannten Programm werden die Eltern der ping in diesem Fall.ja, endlich verstehe ich das,vielen Dank nochmal.
InformationsquelleAutor AraK
Können Sie
waitpid
um den exit-status des Ihnen untergeordneten Prozess als:waitpid()
ist das nicht der "exit-code" zurückgegeben von der Kind-Programm. Siehe AraK's Antwort stackoverflow.com/a/2667166/694576 für details.InformationsquelleAutor codaddict
exec-Funktion familly nicht zurück, die Rückkehr int ist hier nur, wenn ein Fehler beim Start (wie nicht zu finden Datei an exec).
Haben Sie zu fangen Rückgabewert von signal an den Prozeß, die Gabel vor dem Aufruf exec.
call wait() oder waitpid() in Ihrem signal-handler (gut, Sie können auch call wait() in Ihrem Prozess ohne signal-handler, wenn es nichts anderes zu tun hat).
InformationsquelleAutor kriss
Hatte Mühe, Verständnis und Anwendung der bestehenden Antworten.
In AraK ' s Antwort, wenn die Anwendung mehr als ein Kind-Prozess läuft, ist es nicht möglich zu wissen, welche spezifischen Kind-Prozess erzeugt den exit-status erhalten. Laut der man-page,
So, um den exit-status eines bestimmten Kind-Prozess sollten wir umschreiben als Antwort :
Fühlen Sie sich frei, um diese Antwort zu ein edit von AraK ' s Antwort.
InformationsquelleAutor xor007
Können Sie warten, auf der Kind-Prozess und seine exit-status.
Der Systemaufruf wait(pid), versuchen Sie, darüber zu Lesen.
InformationsquelleAutor duduamar