C Exec() Prozessüberlagerung Linux/Unix

ali7566

Lieutenant
Registriert
Feb. 2007
Beiträge
980
Hallo,

ich habe gerade eine verständnisfrage die mich etwas verwirtt im Bezug auf die Exec Funktionen unter Linux.

Die Exec Funktionen sollen ja dafür da sein um das laufende Programm zu ersetzen, jedoch frage ich mich bei folgendem Code:

Code:
#include <stdio.h>
#include <unistd.h>

int main(int argc, int *argv[])
{
 printf("%s wird ausgefuehrt...\n\n", argv[0]);
 printf("%s ruft auf ", argv[0]);
 execl("hellow","","Hallo", "Welt", "wie", "gehts",NULL);

 return 0;
}

Welche Auswirkungen durch den Exec-Befehl denn jetzt wirklich sichtbar oder prüfbar sind ? Unter der Bash kann ich da jetzt auch nichts brauchbares finden und das Programm selber führt die ersten beiden printf() befehle aus und gibt logischweiße über argv[0] den Pfad der aktuellen stelle aus (?). Jedoch sehe ich während der Laufzeit von execl keinen einfluss auf das Laufzeitverhalten ?

Was mache ich falsch und was habe ich noch nicht so recht verstanden ? :)

Hab auch bei Google, Bing einiges gesucht und gefundne jedoch bringt mir das noch nicht so viel für das Verständnis.

Gruß Ali.
 
Du solltest den return value von execl prüfen. Ich schätze, du wirst -1 erhalten. Wieso? Falls "hellow" nicht im PATH ist, wird es nicht gefunden (da kein absoluter Pfad), und daher niemals ausgefuehrt.

Und wenn "hellow" das selbe Programm ist, welches du hier postest, dann würdest du mit deinem Code eine Endlosschleife produzieren.
 
bu1137 schrieb:
Du solltest den return value von execl prüfen. Ich schätze, du wirst -1 erhalten. Wieso? Falls "hellow" nicht im PATH ist, wird es nicht gefunden (da kein absoluter Pfad), und daher niemals ausgefuehrt.

Ganz genau! Eins der Dinge, die ich am liebsten hasse. ;) NIEMALS die Rückgabewerte von Funktionen ignorieren! Die Dinger gibt es aus gutem Grund, und zwar weil Funktionen aus diversen Gründen fehlschlagen können. Niemals einfach davon ausgehen, daß schon alles gutgehen wird. Das ist Sonntagsprogrammierung und geradezu eine Einladung für Bugs!


http://linux.about.com/library/cmd/blcmdl3_execl.htm

RETURN VALUE
If any of the exec functions returns, an error will have occurred. The return value is -1, and the global variable errno will be set to indicate the error.

Also, Fehlerüberprüfung einbauen und glücklich werden!
 
Zurück
Oben