BEZEICHNUNG¶
execl, execlp, execle, execv, execvp, execvpe - führt eine Datei aus
Ü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,
 
 ..., char * const envp[]);
 
int execv(const char *path, char *const
  argv[]);
 
int execvp(const char *file, char *const
  argv[]);
 
int execvpe(const char *file, char *const
  argv[],
 
 char *const envp[]);
 
Mit Glibc erforderliche Makros (siehe 
feature_test_macros(7)):
 
execvpe(): _GNU_SOURCE
BESCHREIBUNG¶
Die 
exec()-Funktionsfamilie ersetzt den aktuellen Programmcode im
  Speicher mit einem neuen Prozessabbild. Die in dieser Handbuchseite
  beschriebenen Bibliotheksfunktionen sind Frontends zu der Systemfunktion
  
execve(2). (Siehe die Handbuchseite von 
execve(2) für
  weitere Details über das Ersetzen des aktuellen Prozessabbilds.)
Das erste Argument dieser Funktionen ist der Name der Datei, die ausgeführt
  werden soll.
Der Ausdruck 
const char *arg und die nachfolgenden Auslassungspunkte
  (»...«) der Funktionen 
execl(), 
execlp() und
  
execle() sind als eine Liste mit einer unbestimmten Anzahl von
  Parametern 
arg0, 
arg1, ..., 
argn zu verstehen. Zusammen
  stellen sie eine Liste mit einem oder mehreren Zeigern auf nullterminierte
  (mit '\0' abgeschlossenen) Zeichenketten dar, die dem aufgerufenen Programm
  als Argumentliste verfügbar ist. Der erste Eintrag sollte
  konventionsgemäß ein Zeiger auf den Dateinamen des aufgerufenen
  Programms sein. Die Parameterliste 
muss mit einem NULL-Zeiger
  abgeschlossen werden und weil es variadische Funktionen sind, muss für
  diesen Zeiger eine Typumwandlung (cast) zu 
(char *) NULL
  durchgeführt werden.
Die Funktionen 
execv(), 
execvp() und 
execvpe()
  übergeben die Aufrufparameter an das Folgeprogramm in einem Feld von
  Zeigern auf nullterminierte Zeichenketten. Das erste Argument sollte
  konventionsgemäß auf den Namen der auszuführenden Datei weisen.
  Der Feld von Zeigern 
muss mit einem NULL-Zeiger als letztem Eintrag
  abgeschlossen werden.
Die Funktionen 
execle() und 
execvpe() ermöglichen dem
  aufrufenden Programm, die Umgebung für das auszuführende Programm
  mittels des Arguments 
envp zu übergeben. Das Argument 
envp
  ist ein Feld von Zeigern auf nullterminierte Zeichenketten und 
muss mit
  einem NULL-Zeiger als letztem Eintrag abgeschlossen werden. Die übrigen
  Funktionen übernehmen die Umgebungsvariablen für den neuen Prozess
  von der externen Variablen 
environ im aufrufenden Prozess.
Spezielle Semantik für execlp() und execvp()¶
Die Funktionen 
execlp(), 
execvp() und 
execvpe() suchen
  ebenso wie die Shell nach einem ausführbaren Programm, wenn der
  angegebene Dateiname keinen Schrägstrich (/) enthält. Die Datei wird
  in der durch Doppelpunkte getrennten Liste von Verzeichnis-Pfadnamen in der
  Umgebungsvariablen 
PATH gesucht. Wenn diese Variable nicht definiert
  ist, ist die Pfadliste standardmäßig das aktuelle Verzeichnis,
  gefolgt von der Verzeichnisliste, die von 
confstr(_CS_PATH)
  zurückgegeben wird. (Dieser Aufruf von 
confstr(3) gibt in der
  Regel den Wert »/bin:/usr/bin« zurück.).
 
Falls der angegebene Dateiname einen Schrägstrich enthält, wird
  
PATH ignoriert und die Datei mit dem angegebenen Pfadnamen
  ausgeführt.
 
Zusätzlich werden bestimmte Fehler speziell behandelt.
 
Falls die Ausführung einer gefundenen Datei verweigert wird (die versuchte
  Ausführung von 
execve(2) führte zum Fehler 
EACCES),
  werden diese Funktionen im restlichen Suchpfad weitersuchen. Wenn aber keine
  andere Datei gefunden wird, kehren diese Funktionen zurück und setzen
  
errno auf 
EACCES.
 
Wenn der Header einer Datei nicht erkannt wird (die versuchte Ausführung
  von 
execve(2) führte zum Fehler 
ENOEXEC), starten diese
  Funktionen die Shell ( 
/bin/sh) mit dem Pfadnamen der Datei als erstes
  Argument. (Wenn dieser Versuch fehlschlägt, wird die Suche abgebrochen.)
RÜCKGABEWERT¶
Die 
exec()-Funktionen kehren nur in das aufrufende Programm zurück,
  wenn ein Fehler aufgetreten ist. Der Rückgabewert ist -1 und 
errno
  wird auf die entsprechende Fehlerkennung gesetzt.
FEHLER¶
Alle diese Funktionen können fehlschlagen und 
errno auf jeden
  möglichen Fehler setzen, der für 
execve(2) angegeben ist.
VERSIONEN¶
Die Funktion 
execvpe() kam erstmals in Glibc 2.11 vor.
POSIX.1-2001, POSIX.1-2008.
 
Die Funktion 
execvpe() ist eine GNU-Erweiterung.
ANMERKUNGEN¶
Auf einigen anderen Systemen befindet sich das aktuelle Arbeitsverzeichnis als
  Maßnahme gegen Trojanische Pferde im Standardpfad (wird verwendet, wenn
  die Umgebung die Variable 
PATH nicht enthält) hinter 
/bin
  und 
/usr/bin. Linux verwendet hier den traditionellen Standardpfad mit
  dem »aktuellen Verzeichnis zuerst«.
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.
  BSD (und möglicherweise andere Systeme) schlafen automatisch und
  wiederholen den Versuch, wenn 
ETXTBSY angetroffen wird. Linux behandelt
  es wie einen harten Fehler und kehrt sofort zurück.
Traditionell ignorierten die Funktionen 
execlp() und 
execvp() alle
  Fehler bis auf die oben beschriebenen sowie 
ENOMEM und 
E2BIG,
  bei deren Auftreten sie ins Hauptprogramm zurückkehrten. Sie kehren jetzt
  ins Hauptprogramm zurück, wenn ein anderer Fehler als die oben
  beschriebenen auftritt.
SIEHE AUCH¶
sh(1), 
execve(2), 
fork(2), 
ptrace(2),
  
fexecve(3), 
environ(7)
KOLOPHON¶
Diese Seite ist Teil der Veröffentlichung 3.42 des Projekts Linux-
  
man-pages. Eine Beschreibung des Projekts und Informationen, wie Fehler
  gemeldet werden können, finden sich unter
  
http://www.kernel.org/doc/man-pages/.
 
ÜBERSETZUNG¶
Die deutsche Übersetzung dieser Handbuchseite wurde von Roland Krause
  <Rokrause@aol.com>, Martin Schulze <joey@infodrom.org> und Martin
  Eberhard Schauer <Martin.E.Schauer@gmx.de> erstellt.
 
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public
  License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird
  KEINE HAFTUNG übernommen.
 
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken
  Sie bitte eine E-Mail an <debian-l10n-german@lists.debian.org>.