Hauptindex | Abschnitt 3 | English | 日本語 | Optionen |
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[]);
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, amp;..., 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 muß 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 muß 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 muß 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 Prozeß 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 Elternprozeß, 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.
Execv setzt in diesem Fall errno auf einen der möglichen Fehler der Funktion execve(2).
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 Programmfluß 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.
26. Januar 1997 | EXEC (3) | BSD MANPAGE |
Hauptindex | Abschnitt 3 | English | 日本語 | Optionen |
Bitte richten Sie Ihre Kommentare zu diesem Handbuch Seite Service, Ben Bullock. Privacy policy.
“ | If you have a problem and you think awk(1) is the solution, then you have two problems. | ” |
— David Tilbrook |