exec(3) Library Functions Manual exec(3) BEZEICHNUNG execl, execlp, execle, execv, execvp, execvpe - fuhrt eine Datei aus BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include extern char **environ; int execl(const char *pathname, const char *arg, /*, (char *) NULL */); int execlp(const char *file, const char *arg, /*, (char *) NULL */); int execle(const char *pathname, const char *arg, /*, (char *) NULL, char *const envp[] */); int execv(const char *pathname, 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 Feature-Test-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 uber diejenigen der Systemfunktion execve(2) gelegt. (Siehe die Handbuchseite von execve(2) fur weitere Details uber das Ersetzen des aktuellen Prozessabbilds.) Das erste Argument dieser Funktionen ist der Name der Datei, die ausgefuhrt werden soll. Die Funktionen konnen, basierend auf den Buchstaben, die dem Namensanfang >>exec<< folgen, gruppiert werden. l - execl(), execlp(), execle() Der Ausdruck const char *arg und die nachfolgenden Auslassungspunkte (>><<) 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 mit einem Nullbyte (>>\0<<) abgeschlossene Zeichenketten dar, die dem aufgerufenen Programm als Argumentliste verfugbar ist. Der erste Eintrag sollte konventionsgemass ein Zeiger auf den Dateinamen des aufgerufenen Programms sein. Die Parameterliste muss mit einem Nullzeiger abgeschlossen werden und weil es variadische Funktionen sind, muss fur diesen Zeiger eine Typumwandlung (cast) zu (char *) NULL durchgefuhrt werden. Im Gegensatz zu den >>l<<-Funktionen legen die >>v<<-Funktionen (unten) die Befehlszeilenargumente des ausgefuhrten Programmes als Vektor fest. v - execv(), execvp(), execvpe() Die Argument char *const argv[] ist ein im Folgeprogramm verfugbares Feld von Zeigern auf mit einem Nullbyte abgeschlossene Zeichenketten, die die Argumentenliste darstellen. Das erste Argument sollte konventionsgemass auf den Namen der auszufuhrenden Datei weisen. Der Feld von Zeigern muss mit einem Nullzeiger als letztem Eintrag abgeschlossen werden. e - execle(), execvpe() Die Umgebung fur das neue Prozessabbild wird mittels des Arguments envp festgelegt. Das Argument envp ist ein Feld von Zeigern auf mit einem Nullbyte abgeschlossene Zeichenketten und muss mit einem Nullzeiger als letztem Eintrag abgeschlossen werden. Alle anderen exec()-Funktionen (die kein >>e<< in der Endung enthalten) ubernehmen die Umgebungsvariablen fur den neuen Prozess von der externen Variablen environ im aufrufenden Prozess. p - execlp(), execvp(), execvpe() Diese Funktionen suchen ebenso wie die Shell nach einem ausfuhrbaren Programm, wenn der angegebene Dateiname keinen Schragstrich (/) enthalt. 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 standardmassig eine Liste, die die von confstr(_CS_PATH) (das typischerweise den Wert >>/bin:/usr/bin<< zuruckliefert) zuruckgelieferten Verzeichnisse enthalt und mglicherweise auch das aktuelle Arbeitsverzeichnis. Lesen Sie ANMERKUNGEN fur weitere Details. execvpe() sucht nach dem Programm mittels des Werts von PATH aus der Umgebung des Aufrufenden, nicht aus dem Argument envp. Falls der angegebene Dateiname einen Schragstrich enthalt, wird PATH ignoriert und die Datei mit dem angegebenen Pfadnamen ausgefuhrt. Zusatzlich werden bestimmte Fehler speziell behandelt. Falls die Ausfuhrung einer gefundenen Datei verweigert wird (die versuchte Ausfuhrung von execve(2) fuhrte zum Fehler EACCES), werden diese Funktionen im restlichen Suchpfad weitersuchen. Wenn aber keine andere Datei gefunden wird, kehren diese Funktionen zuruck und setzen errno auf EACCES. Wenn der Header einer Datei nicht erkannt wird (die versuchte Ausfuhrung von execve(2) fuhrte zum Fehler ENOEXEC), starten diese Funktionen die Shell (/bin/sh) mit dem Pfadnamen der Datei als erstes Argument. (Wenn dieser Versuch fehlschlagt, wird die Suche abgebrochen.) Alle anderen exec()-Funktionen (die kein >>p<< in der Endung enthalten) akzeptieren als ihr erstes Argument einen (relativen oder absoluten) Pfadnamen, der das auszufuhrende Programm identifiziert. RUCKGABEWERT Die exec()-Funktionen kehren nur in das aufrufende Programm zuruck, wenn ein Fehler aufgetreten ist. Der Ruckgabewert ist -1 und errno wird auf die entsprechende Fehlerkennung gesetzt. FEHLER Alle diese Funktionen konnen fehlschlagen und errno auf jeden moglichen Fehler setzen, der fur execve(2) angegeben ist. ATTRIBUTE Siehe attributes(7) fur eine Erlauterung der in diesem Abschnitt verwandten Ausdrucke. +----------------------------+-------------------------+---------------+ |Schnittstelle | Attribut | Wert | +----------------------------+-------------------------+---------------+ |execl(), execle(), execv() | Multithread-Fahigkeit | MT-Sicher | +----------------------------+-------------------------+---------------+ |execlp(), execvp(), | Multithread-Fahigkeit | MT-Sicher env | |execvpe() | | | +----------------------------+-------------------------+---------------+ VERSIONEN Der Standardsuchpfad (wird verwandt, wenn die Umgebung nicht die Variable PATH enthalt), zeigt zwischen Systemen einige Variationen. Im Allgemeinen enthalt es /bin und /usr/bin (in dieser Reihenfolge) und kann auch das aktuelle Arbeitsverzeichnis enthalten. Auf einigen Systemen ist das aktuelle Arbeitsverzeichnis nach /bin und /usr/bin enthalten, um Trojanische Pferde zu vermeiden. Die Glibc-Implementierung folgte lange der traditionellen Vorgabe, bei der das aktuelle Arbeitsverzeichnis am Anfang des Suchpfades enthalten ist. Aufgrund einiger Code-Uberarbeitungen wahrend der Entwicklung der Glibc 2.24 wurde das aktuelle Arbeitsverzeichnis aus dem Standard-Suchpfad komplett entfernt. Diese versehentliche Verhaltensanderung wird leicht nutzlich eingeschatzt und wird nicht zuruckgenommen. 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 moglicherweise andere Systeme) schlafen automatisch und wiederholen den Versuch, wenn ETXTBSY angetroffen wird. Linux behandelt es wie einen harten Fehler und kehrt sofort zuruck. Traditionell ignorierten die Funktionen execlp() und execvp() alle Fehler bis auf die oben beschriebenen sowie ENOMEM und E2BIG, bei deren Auftreten sie ins Hauptprogramm zuruckkehrten. Sie kehren jetzt ins Hauptprogramm zuruck, wenn ein anderer Fehler als die oben beschriebenen auftritt. STANDARDS environ execl() execlp() execle() execv() execvp() POSIX.1-2008. execvpe() GNU. GESCHICHTE environ execl() execlp() execle() execv() execvp() POSIX.1-2001. execvpe() Glibc 2.11. FEHLER Vor Glibc 2.24 verwandten execl() und execle() intern realloc(3) und waren daher nicht asynchron-signal-sicher. Dies verletzte die Anforderungen von POSIX.1. Dies wurde in Glibc 2.24 korrigiert. Architekturspezifische Details Unter Sparc und Sparc64 wird execv() zur Kompatibilitat mit SunOS durch den Kernel als ein Systemaufruf (mit dem oben gezeigten Prototypen) bereitgestellt. Diese Funktion wird durch den execv()-Wrapper auf diesen Architekturen nicht eingesetzt. SIEHE AUCH sh(1), execve(2), execveat(2), fork(2), ptrace(2), fexecve(3), system(3), environ(7) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Martin Schulze , Roland Krause , Martin Eberhard Schauer und Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 exec(3)