C Sigaktionsfunktionsverbrauch

C Sigaktionsfunktionsverbrauch
Eine SigAction () ist eine Funktion, mit der eine bestimmte Aktion aufgerufen oder beobachtet oder untersucht werden kann, die mit einem bestimmten Signal verbunden ist. Es wird angenommen, dass es auf derselben Seite eine Signal- und Sigaktionsfunktion berücksichtigt. Aber in Wirklichkeit ist es nicht aufgetreten. Die Funktion signal () blockiert keine anderen Signale, wenn die Ausführung des aktuellen Handlers in Bearbeitung ist. Gleichzeitig kann die Sigaktionsfunktion andere Signale blockieren, bis der aktuelle Handler zurückgekehrt ist.

Syntax

#enthalten
# int sigaction (int sig, const struct sigaction *__ einschränken __ new, struct sigaction *__ begrenzt __ alt);

Die Sigaktionsfunktion untersucht die mit einem bestimmte Signal verbundene Aktion. Wir sprechen nun über die Argumente im Parameter der Sigaktionsfunktion. Der erste ist int 'sig', wie der Datentyp zeigt, dass es sich um eine Zahl handelt, die sich auf das bereits erkannte Signal bezieht. Die Sigaktionsfunktion legt die Aktion fest und assoziiert sie mit dem Signal. Das verwendete Sig -Argument muss in der Bibliothek sein.

Konstante Struktur -Sigaktion ist ein Zeiger, der zuerst meist als Null bezeichnet wird. In diesem Fall untersucht die Sigaktionsfunktion die Aktion, die derzeit definiert ist, um Sig zu verarbeiten. Dies wird diese Aktion nicht ändern oder abbrechen. Und wenn der neue Zeiger nicht als Nullwert bezeichnet wird, verweist er auf eine Sigaktionsstruktur. Die spezifisch in der Sigaktionsstruktur identifizierte Aktion wird dann zu der neuen Aktion, die mit SIG verbunden ist.

Das dritte Argument ist Struct Sigaction *Alt Es weist auf die Speicheradresse hin, bei der die Sigaktionsfunktion die Sigaktionsstruktur speichert. Die Sigaktionsfunktion verwendet diese Speicheradresse, um die Struktur zu speichern, die die derzeit mit SIG zugeordnete Aktivität beschreibt. Der alte Wert kann ein Nullwert sein; In diesem Fall wird die Sigaktionsstruktur nicht als Informationen gespeichert.

Sigaktionsstruktur

Jetzt werden wir über die Sigaktionsstruktur sprechen.

Die Mitglieder, die in der Struktur vorhanden sind.

Void (*) (int) sa_handler

Es ist ein Zeiger der Funktion und behandelt das Signal, das darauf zugeht. Der Wert dieser Funktion kann die Standardaktion anzeigen oder das zu ignorierende Signal angeben.

SIGSET_T -Maske

Wir können den Mechanismus nicht verwenden, ein Signal zu blockieren. Wenn SA_Mask die Blockierungssignale verwendet hat, werden diese Signale ignoriert. Die Funktion Sigaction () gibt keinen Fehler zurück.

Int sa_flags

Es gibt viele Flags, die das Verhalten des Signals beeinflussen. Einige von ihnen werden hier erklärt.

_Sa_ignore

Dies ist die einzige Ausgabe, und jede Anwendung kann sie nicht angeben.

Sa-restart

Es fordert das System an, die Neustartfunktionen der Bibliothek zu erhalten, wenn sie von einem Signal unterbrochen werden. Die Funktionen, auf die diese Neustartfunktion angewendet wird Neustartbar, wenn ein Signal sie unterbricht.

Sa_Siginfo

Diese Funktion fordert das System an. Wenn das Flag ausgeschaltet ist und die Aktion vom Signal beeinflusst wird, wird die von SA_Handler angegebene Signalhandlerfunktion als Hohlraumfunktion (int Signo) aufgerufen. Hier enthält Signo die Signalnummer, die das System erzeugt hat.

Sa_siigaction

Es ist ein Zeiger, der auf die zugewiesene Funktion zeigt, um das Signal zu verarbeiten. Diese Funktion enthält drei Parameter. Der erste enthält eine Typ -Ganzzahl, die das Signal der Funktion enthält, um aufgerufen zu werden. Das zweite Argument ist ein Zeigertyp siginfo_t; Es enthält zusätzliche Informationen über die Signalquelle. Der dritte ist der Zeiger auf ungültig.''

Implementierung der Sigaktionsfunktion

Wir haben die Sigaktionscodes im Linux -Betriebssystem implementiert. Verwenden Sie einen Texteditor, um den Quellcode in die C -Programmiersprache C zu schreiben. Verwenden Sie für die Ausgabe des resultierenden Wertes das Ubuntu -Terminal, indem Sie über einen GCC -Compiler zusammenstellen. Das kompilieren und dann den Code ausführen.

Beispiel 1

Dieses Beispiel enthält eine Liste von Bibliotheken und . In diesem Beispiel wird eine Signalmaske verwendet und mit Sigaction () auf den anderen Handler eingestellt, insbesondere wenn ein einzelner Handler verwendet wird. Die Signalhandlerfunktion enthält das Signo als Argument.

Die Prozess -ID wird im Hauptprogramm angezeigt, um die Arbeit zu gewährleisten. Sigaktion ist eine Struktur, die einen Signalhandler beschreibt. Dies ist der Grund, warum ein Signalhandler darin enthalten ist. Es wird eine Signalmaske verwendet, die zeigt, dass es eine Blockierung eines Signals geben sollte, während die Funktion des Signalhandhabers in der Ausführung ist. Geben Sie nun die Signalhandlerfunktion an, wenn ein angegebenes Signal aufgetreten ist.

# Struct Sigaction Act;
# Gesetz.sa.Handler = $ seufzler;

Danach werden alle Signale zum Signalmaskensatz hinzugefügt. Alle Signale werden blockiert, wenn die Signalhandlerfunktionen ausgeführt werden. Wenn unser Signalhandler normalerweise existiert, stellt es die ursprüngliche Signalmaske wieder her. SA_RESTART wird die Funktion wieder aufnehmen. Ein Signalhandler wird SIGINT hinzugefügt.

Kompilieren Sie nach dem Schreiben des Codes den Compiler im Ubuntu -Terminal mit dem Compiler. „Sig.C ”ist der Name einer Datei.

$ gcc -o sig. C
$./sig

Bei der Ausführung können Sie feststellen, dass die Prozess -ID zuerst angezeigt wird, deren Signale blockiert werden müssen. Die angezeigte Nachricht bedeutet, dass die Funktion einen positiven Wert zurückgibt.

Beispiel 2

Betrachten Sie nun ein anderes Beispiel, in dem der erste Teil des Beispiels bestimmt, ob das Sighld -Signal derzeit ignoriert wird. Mit einem Nullzeiger für ein neues Argument wird der aktuelle Signalhandler nicht geändert. Das Hauptprogramm enthält die IF -Anweisung, um die Sigaktionsfunktion zu verwenden. Wenn der zurückgegebene Wert -1 ist, bedeutet dies, dass das Kind ignoriert wird. Und im anderen Teil, wenn der zurückgegebene Wert das Signal selbst ist. Es bedeutet, dass das Kind in standardmäßiger Weise wird.

Bei der Ausführung sehen Sie, dass das Kind ausfällt.

Beispiel 3

Dieses Beispiel enthält die gleiche Funktionalität wie das zweite Beispiel, aber einige zusätzliche Funktionen werden ebenfalls hinzugefügt. Wie ein neuer Handler in dieser Funktion durch Sigaktion hinzugefügt wird.

Abschluss

Der Artikel "Sigaction Function Usage" enthält die Funktionsarbeit und eine detaillierte Beschreibung seiner Parameter in den Argumenten. Sigaktion spielt eine wichtige Rolle bei der Blockierung der Signale, die nicht erkannt werden oder von Hackern stammen. Deshalb bevorzugen die meisten Programmierer Sigaktionsfunktionen, die in den Programmen verwendet werden können. SA_FLAG ist ein wesentliches Argument der Sigaktionsfunktion, daher haben wir einige wichtige Flags mit grundlegenden Funktionen erklärt. Linux -Betriebssystem gilt für eine wichtige Rolle bei der Implementierung der Sigaktionsfunktion in der C -Programmiersprache. Dieser Leitfaden zielt darauf ab, die Sigaktionsmerkmale und die Struktur zu erklären, die darauf abzielt.