oracular (3) exec.3.gz

Provided by: manpages-de-dev_4.23.1-1_all bug

BEZEICHNUNG

       execl, execlp, execle, execv, execvp, execvpe - führt eine Datei aus

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #include <unistd.h>

       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 über diejenigen  der  Systemfunktion
       execve(2)  gelegt.  (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.

       Die Funktionen können, 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 verfügbar ist. Der  erste  Eintrag  sollte  konventionsgemäß  ein
       Zeiger  auf  den Dateinamen des aufgerufenen Programms sein. Die Parameterliste muss mit einem Nullzeiger
       abgeschlossen werden und weil es variadische Funktionen sind, muss für diesen Zeiger  eine  Typumwandlung
       (cast) zu (char *) NULL durchgeführt werden.

       Im  Gegensatz  zu  den  »l«-Funktionen  legen  die  »v«-Funktionen (unten) die Befehlszeilenargumente des
       ausgeführten Programmes als Vektor fest.

   v - execv(), execvp(), execvpe()
       Die Argument char *const argv[] ist ein im Folgeprogramm verfügbares  Feld  von  Zeigern  auf  mit  einem
       Nullbyte  abgeschlossene  Zeichenketten,  die  die  Argumentenliste darstellen. Das erste Argument sollte
       konventionsgemäß auf den Namen der auszuführenden Datei weisen. Der  Feld  von  Zeigern  muss  mit  einem
       Nullzeiger als letztem Eintrag abgeschlossen werden.

   e - execle(), execvpe()
       Die Umgebung für 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) übernehmen die Umgebungsvariablen
       für den neuen Prozess von der externen Variablen environ im aufrufenden Prozess.

   p - execlp(), execvp(), execvpe()
       Diese Funktionen 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 eine Liste, die die von confstr(_CS_PATH) (das typischerweise den Wert
       »/bin:/usr/bin«  zurückliefert)  zurückgelieferten  Verzeichnisse  enthält  und  mglicherweise  auch  das
       aktuelle Arbeitsverzeichnis. Lesen Sie ANMERKUNGEN für 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 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.)

       Alle anderen exec()-Funktionen (die kein »p« in der Endung enthalten) akzeptieren als ihr erstes Argument
       einen (relativen oder absoluten) Pfadnamen, der das auszuführende Programm identifiziert.

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.

ATTRIBUTE

       Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.

       ┌────────────────────────────────────────────────────────────────┬───────────────────────┬───────────────┐
       │SchnittstelleAttributWert          │
       ├────────────────────────────────────────────────────────────────┼───────────────────────┼───────────────┤
       │execl(), execle(), execv()                                      │ Multithread-Fähigkeit │ MT-Sicher     │
       ├────────────────────────────────────────────────────────────────┼───────────────────────┼───────────────┤
       │execlp(), execvp(), execvpe()                                   │ Multithread-Fähigkeit │ MT-Sicher env │
       └────────────────────────────────────────────────────────────────┴───────────────────────┴───────────────┘

VERSIONEN

       Der Standardsuchpfad (wird verwandt, wenn die Umgebung nicht die Variable PATH enthält),  zeigt  zwischen
       Systemen einige Variationen. Im Allgemeinen enthält 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-Überarbeitungen während der Entwicklung der Glibc 2.24 wurde das
       aktuelle  Arbeitsverzeichnis  aus  dem  Standard-Suchpfad   komplett   entfernt.   Diese   versehentliche
       Verhaltensänderung wird leicht nützlich eingeschätzt und wird nicht zurückgenommen.

       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.

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 Kompatibilität 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)

ÜBERSETZUNG

       Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Schulze <joey@infodrom.org>, Roland Krause
       <Rokrause@aol.com>,    Martin   Eberhard   Schauer   <Martin.E.Schauer@gmx.de>   und   Helge   Kreutzmann
       <debian@helgefjell.de> erstellt.

       Diese Übersetzung  ist  Freie  Dokumentation;  lesen  Sie  die  GNU  General  Public  License  Version  3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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  die
       Mailingliste der Übersetzer ⟨debian-l10n-german@lists.debian.org⟩.