Systemsubroutine

Zweck

Führt einen Shellbefehl aus.

Bibliothek

Standard-C-Bibliothek (libc.a)

Syntax

#include <stdlib.h>
int system ( String)
const char *String;

Beschreibung

Die Subroutine system übergibt den Parameter Zeichenfolge als Eingabe an den Befehl sh . Anschließend interpretiert der Befehl sh den Parameter Zeichenfolge als Befehl und führt ihn aus.

Die Subroutine system ruft die Subroutine fork auf, um einen untergeordneten Prozess zu erstellen, der wiederum die Subroutine exec l verwendet, um den/auszuführenBefehl usr/bin/sh , der den im Parameter Zeichenfolge enthaltenen Shellbefehl interpretiert. Wenn die Subroutine system im vertrauenswürdigen Pfad aufgerufen wird, führt sie die Trusted Path-Shell (/usr/bin/tsh) aus. Der aktuelle Prozess wartet, bis die Shell abgeschlossen ist, und gibt dann den Exitstatus der Shell zurück. Der Exitstatus der Shell wird auf dieselbe Weise wie ein Aufruf der Subroutine wait oder waitpid zurückgegeben, wobei die Strukturen in der Datei sys/wait.h verwendet werden.

Die Subroutine system ignoriert die Signale SIGINT und SIGQUIT . und blockiert das Signal SIGCHILD , während darauf gewartet wird, dass der mit dem Parameter Zeichenfolge angegebene Befehl beendet wird. Wenn dies dazu führen könnte, dass die Anwendung ein Signal verpasst, das sie abgebrochen hätte, sollte die Anwendung den von der Subroutine system zurückgegebenen Wert verwenden, um die entsprechende Aktion auszuführen, wenn der Befehl aufgrund des Empfangs eines Signals beendet wurde. Die Subroutine system wirkt sich nicht auf den Beendigungsstatus eines untergeordneten Prozesses des aufrufenden Prozesses aus, es sei denn, dieser Prozess wurde von der Subroutine system erstellt. Die Subroutine system kehrt erst zurück, wenn der untergeordnete Prozess beendet wurde.

Parameter

Element Beschreibung
string Gibt einen gültigen sh -Shellbefehl an.
Hinweis: Die Subroutine system führt nur sh -Shellbefehle aus. Die Ergebnisse sind unvorhersehbar, wenn der Parameter Zeichenfolge kein gültiger sh -Shellbefehl ist.

Rückgabewerte

Nach erfolgreicher Beendigung gibt die Subroutine system den Exitstatus der Shell zurück. Der Exitstatus der Shell wird auf dieselbe Weise wie ein Aufruf der Subroutine wait oder waitpid zurückgegeben, wobei die Strukturen in der Datei sys/wait.h verwendet werden.

Wenn der Parameter Zeichenfolge ein Nullzeiger ist und ein Befehlsprozessor verfügbar ist, gibt die Subroutine system einen Wert ungleich null zurück. Wenn das Unterprogramm fork fehlschlägt oder der Exit-Status der Shell nicht ermittelt werden kann, gibt das Unterprogramm system den Wert -1 zurück. Wenn die Subroutine exec l fehlschlägt, gibt die Systemsubroutine den Wert 127 zurück. In allen Fällen wird die globale Variable errno gesetzt, um den Fehler anzuzeigen.

Fehlercodes

Die Subroutine system schlägt fehl, wenn eine der folgenden Bedingungen zutrifft:

Element Beschreibung
EAGAIN Der vom System festgelegte Grenzwert für die Gesamtzahl aktiver Prozesse (systemweit oder durch eine einzelne Benutzer-ID) wurde überschritten.
EINTR Die Subroutine system wurde durch ein Signal unterbrochen, das vor dem Starten des angeforderten Prozesses abgefangen wurde. Der Fehlercode EINTR wird nach Beginn des angeforderten Prozesses nie zurückgegeben.
ENOMEM Es ist nicht genügend Speicherplatz verfügbar.