Provided by: manpages-de-dev_0.10-1_all bug

BEZEICHNUNG

       execl, execlp, execle, execv, execvp - Datei ausführen

       Diese  Handbuchseite ist eventuell veraltet. Im Zweifelsfall ziehen Sie
       die englischsprachige Handbuchseite zu Rate, indem Sie

              man -LC 3 exec

       eingeben.

ÜBERSICHT

       #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 ausgeführt 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[] übergeben
       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 übergeben 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 übergibt zusätzlich 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   müssen   nullterminiert   sein.    Die
       Parameterliste  arg0  bis  argn  wird  zunächst mit einem NULL - Zeiger
       abgeschlossen. Hinter dem NULL-Zeiger wird dann der Zeigervektor envp[]
       wie  oben  beschrieben angegeben. Die übrigen Funktionen übernehmen die
       Umgebungsvariablen für den neuen Prozess  von  der  externen  Variablen
       environ.

       Ein Teil der Funktionen hat eine spezielle Semantik.

       Die Funktionen execlp und execvp verwenden den Suchpfad für ausführbare
       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  Ausführung  einer  gefundenen  Datei  nicht möglich 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 Rückgabewert -1 in
       das aufrufende Programm zurück. 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 fehlschlägt, wird die Suche abgebrochen.

       Wenn  der Zugriff auf die gefundene Datei gerade nicht möglich ist (der
       execve-Aufruf lieferte ETXTBUSY  in  errno),  warten  diese  Funktionen
       mehrere   Sekunden   und   versuchen  periodisch  die  gefundene  Datei
       auszuführen. Dieses Problem kann beim Dateizugriff  über  ein  Netzwerk
       wie z.B. mit NFS auftreten.

RÜCKGABEWERT

       Wenn  eine  der exec-Funktionen in das aufrufende Programm zurückkehrt,
       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 möglichen Fehler
       der Funktionen execve(2) oder malloc(3) gesetzt.

       Execv setzt in diesem Fall errno auf einen  der  möglichen  Fehler  der
       Funktion execve(2).

KOMPATIBILITÄT

       In  früheren  Versionen von execlp und execvp wurde ``.:/bin:/usr/bin''
       als Standard-Suchpfad verwendet. Um die  Systemsicherheit  zu  erhöhen,
       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 für  die  Ausgabe  von  Fehlermeldungen  genutzt  und
       keinesfalls  der Programmfluss von diesem Wert abhängig 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
       Fällen  sie  ins  Hauptprogramm  zurückkehren.  Sie  kehren  jetzt  ins
       Hauptprogramm bei  jedem  Fehler  anders  als  den  oben  beschriebenen
       zurück.

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).