Provided by:
manpages-de-dev_0.10-1_all 
BEZEICHNUNG
system - einen Shell-Befehl ausfuhren
"UBERSICHT
#include <stdlib.h>
int system(const char *befehl);
BESCHREIBUNG
system() fuhrt einen in befehl angegebenen Befehl durch Aufruf von
/bin/sh -c befehl aus und kehrt zuruck nachdem der Befehl abgeschlossen
wurde. Wahrend der Ausfuhrung des Befehls wird SIGCHLD blockiert und
sowohl SIGINT als auch SIGQUIT werden ignoriert.
R"UCKGABEWERT
Im Fehlerfall wird -1 (z.B. fork(2) fehlgeschlagen) und andernfalls der
Status des Befehls zuruckgegeben. Dieser letztgenannte Ruckgabestatus
hat das in wait(2) spezifizierte Format. In dem Fall, dass /bin/sh
nicht ausgefuhrt werden konnte, wird der Exit-Status der des Befehls
sein, der exit(127) aufrief.
Falls der Wert von befehl NULL ist, gibt system() eine Wert ungleich
Null zuruck, wenn die Shell verfugbar ist und Null, wenn nicht.
system() beeinflusst nicht den Wartestatus anderer Kindprozesse.
KONFORM ZU
C89, C99, POSIX.1-2001.
ANMERKUNGEN
Falls das Feature-Test-Makro _XOPEN_SOURCE definiert wurde (vor dem
Einbinden irgendwelcher Header-Dateien), dann werden die in wait(2)
beschriebenen Makros (WEXITSTATUS(), etc.) durch das Einbinden von
<stdlib.h> zur Verfugung gestellt.
Wie erwahnt, ignoriert system() SIGINT und SIGQUIT. Dies kann dazu
fuhren, dass Programme, die es in einer Schleife aufrufen, nicht mehr
unterbrochen werden konnen, sofern sie nicht aufpassen, dass sie selbst
den Exit-Status des Kindprozesses prufen. Z.B.
while (etwas) {
int ret = system("foo");
if (WIFSIGNALED(ret) &&
(WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT))
break;
}
Benutzen Sie system() nicht von einem Programm mit SUID- oder
SGID-Rechten, da unbekannte Werte fur einige Umgebungsvariablen benutzt
werden konnten, die moglicherweise die Systemintegritat untergraben.
Benutzen Sie stattdessen die Funktionen der exec(3)-Familie, jedoch
nicht execlp(3) oder execvp(3). Genaugenommen wird system() aus
Programmen mit SUID- oder SGID-Rechten nicht richtig auf Systemen
funktionieren, auf denen /bin/sh Bash in der Version 2 vorliegt, da
Bash 2 beim Start Privilegien verwirft. (Debian benutzt eine veranderte
Bash, die dies unterlasst, wenn sie als sh aufgerufen wird.
In Glibc-Versionen vor 2.1.3 wurde die Verfugbarkeit von /bin/sh
genaugenommen nicht uberpruft, wenn befehl NULL war. Stattdessen wurde
angenommen, es sei verfugbar und system() gab in diesem Fall immer 1
zuruck. Seit Glibc 2.1.3 wird diese Uberprufung durchgefuhrt, da,
obwohl POSIX.1-2001 eine entsprechende Implementierung benotigt, um
eine Shell zur Verfugung zu stellen, diese Shell nicht verfugbar oder
ausfuhrbar sein konnte, wenn das aufrufende Programm vorher chroot(2)
aufrief (was nicht durch POSIX.1-2001 spezifiziert ist).
Es ist moglich, dass der Shell-Befehl 127 zuruckgibt. Dies ist kein
eindeutiger Indikator dafur, dass der Aufruf von execve(2) fehlschlug.
SIEHE AUCH
sh(1), signal(2), wait(2), exec(3)
KOLOPHON
Diese Seite ist Teil der Veroffentlichung 3.32 des Projekts
Linux-man-pages. Eine Beschreibung des Projekts und Informationen, wie
Fehler gemeldet werden konnen, finden sich unter
http://www.kernel.org/doc/man-pages/.
"UBERSETZUNG
Die deutsche Ubersetzung dieser Handbuchseite wurde von Patrick Rother
<krd@gulu.net> und Chris Leick <c.leick@vollbio.de> 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 <debian-l10n-
german@lists.debian.org>.
10. September 2010 SYSTEM(3)