Provided by:
manpages-de-dev_0.10-1_all 
BEZEICHNUNG
execl, execlp, execle, execv, execvp - Datei ausfuhren
Diese Handbuchseite ist eventuell veraltet. Im Zweifelsfall ziehen Sie
die englischsprachige Handbuchseite zu Rate, indem Sie
man -LC 3 exec
eingeben.
"UBERSICHT
#include <unistd.h>
extern char **environ;
int execl( const char *path, const char *arg, ...);
int execlp( const char *file, const char *arg, ...);
int execle( const char *path, const char *arg,
..., NULL, char * const envp[]);
int execv( const char *path, char *const argv[]);
int execvp( const char *file, char *const argv[]);
BESCHREIBUNG
Die exec-Bibliotheksfunktionen ersetzen den aktuellen Programmcode im
Speicher mit neuem Programmcode. Dieser Programmcode wird aus einer
Datei geladen. Die hier beschriebenen Bibliotheksfunktionen stellen
eine Schnittstelle zu der Systemfunktion execve(2) dar.
Das erste Argument dieser Funktionen ist immer der Pfadname der Datei,
die ausgefuhrt werden soll.
Der Ausdruck const char *arg und die nachfolgenden Ellipsen ('...' wird
auch Ellipse genannt) der Funktionen execl, execlp, und execle ist als
eine Liste mit einer unbestimmten Anzahl von Parametern arg0, arg1,
..., argn zu verstehen. Zusammen stellen sie eine Liste mit einem oder
mehreren nullterminierten (mit '\0' abgeschlossenen) Zeichenketten dar,
die der Funktion main des aufgerufenen Programms in argv[] ubergeben
wird. Der erste Eintrag arg0 sollte ein Zeiger auf den Dateinamen des
aufgerufenen Programms sein. Dieser Dateiname wird normalerweise von
jedem Programm in argv[0] erwartet. Die Parameterliste der
execl-Funktionen muss mit einem NULL-Zeiger abgeschlossen werden.
Die Funktionen execv und execvp ubergeben die Aufrufparameter an das
Folgeprogramm in einem Vektor von Zeigern auf nullterminierte
Zeichenketten. Die Struktur dieses Vektors entspricht exakt dem Aufbau
von argv[] der Funktion main eines Programms. Daher sollte der erste
Eintrag in diesem Vektor einen Zeiger auf den Dateinamen des
aufgerufenen Programms enthalten. Der Zeigervektor muss mit einen
NULL-Zeiger als letzten Eintrag abgeschlossen werden.
Die Funktion execle ubergibt zusatzlich die Umgebungsvariablen (siehe
env(1)) in einem Zeigervektor an das Folgeprogramm. Dieser Vektor muss
ebenfalls mit einem NULL-Zeiger als letzten Eintrag abgeschlossen
werden. Alle Zeichenketten mussen nullterminiert sein. Die
Parameterliste arg0 bis argn wird zunachst mit einem NULL - Zeiger
abgeschlossen. Hinter dem NULL-Zeiger wird dann der Zeigervektor
envp[] wie oben beschrieben angegeben. Die ubrigen Funktionen
ubernehmen die Umgebungsvariablen fur den neuen Prozess von der
externen Variablen environ.
Ein Teil der Funktionen hat eine spezielle Semantik.
Die Funktionen execlp und execvp verwenden den Suchpfad fur ausfuhrbare
Dateien vom Elternprozess, wenn der angegebene Programmname nicht in
Form eines relativen oder absoluten Pfadnamens angegeben wird. Der
Suchpfad wird durch die Umgebungsvariable PATH definiert. Ist PATH
nicht definiert, wird der Standardpfad ``/bin:/usr/bin:.'' verwendet.
Wenn die Ausfuhrung einer gefundenen Datei nicht moglich war (der
execve-Aufruf lieferte EACCES in errno), wird die Suche mit den
verbliebenen Pfadangaben des Suchpfades fortgesetzt. Wenn keine andere
Datei gefunden wird, kehren diese Funktionen mit dem Ruckgabewert -1 in
das aufrufende Programm zuruck. Die globale Fehlervariable errno ist
in diesem Fall auf EACCES gesetzt.
Wenn der Dateiheader einer gefundenen Datei nicht das korrekte Format
hat (der execve-Aufruf lieferte ENOEXEC in errno), starten diese
Funktionen eine Shell mit dem Pfadnamen dieser Datei als erstes
Argument. Wenn dieser Versuch fehlschlagt, wird die Suche abgebrochen.
Wenn der Zugriff auf die gefundene Datei gerade nicht moglich ist (der
execve-Aufruf lieferte ETXTBUSY in errno), warten diese Funktionen
mehrere Sekunden und versuchen periodisch die gefundene Datei
auszufuhren. Dieses Problem kann beim Dateizugriff uber ein Netzwerk
wie z.B. mit NFS auftreten.
R"UCKGABEWERT
Wenn eine der exec-Funktionen in das aufrufende Programm zuruckkehrt,
ist ein Fehler aufgetreten. Das Funktionsergebnis ist -1 und die
globale Variable errno wird auf die entsprechende Fehlerkennung
gesetzt.
DATEIEN
/bin/sh
FEHLER
Der Aufruf der Funktionen execl, execle, execlp und execvp kann
fehlschlagen. In diesem Fall wird errno auf einen der moglichen Fehler
der Funktionen execve(2) oder malloc(3) gesetzt.
Execv setzt in diesem Fall errno auf einen der moglichen Fehler der
Funktion execve(2).
KOMPATIBILIT"AT
In fruheren Versionen von execlp und execvp wurde ``.:/bin:/usr/bin''
als Standard-Suchpfad verwendet. Um die Systemsicherheit zu erhohen,
wurde das aktuelle Verzeichnis ``.'' zum Ende des Suchpfads verlegt.
Linux verwendet hier den traditionellen "lokaler Pfad zuerst"-Pfad.
Das Fehlerverhalten von execlp und execvp beim Versuch Programme zu
starten ist historische Praxis und traditionell undokumentiert. Daher
ist dieses Verhalten auch nicht durch den POSIX Standard spezifiziert.
Generell sollte der Wert von errno nach einem Fehler einer
exec-Funktion nur fur die Ausgabe von Fehlermeldungen genutzt und
keinesfalls der Programmfluss von diesem Wert abhangig gemacht werden.
Es ist auf jedem UNIX-Derivat mit unterschiedlichen Ergebnissen zu
rechnen.
Traditionell ignorieren die Funktionen execlp und execvp alle Fehler
bis auf die oben beschriebenen sowie ENOMEM und E2BIG, in welchen
Fallen sie ins Hauptprogramm zuruckkehren. Sie kehren jetzt ins
Hauptprogramm bei jedem Fehler anders als den oben beschriebenen
zuruck.
KONFORM ZU
Execl, execv, execle, execlp and execvp sind konform zu IEEE
Std1003.1-88 (POSIX).
SIEHE AUCH
sh(1), execve(2), fork(2), environ(7).