Das Betriebssystem sendet ein Signal, bei dem es sich um einen Software erzeugten Interrupt handelt, zu einem Prozess, wenn der Benutzer die Taste „Strg-c“ drückt oder wenn ein anderer Prozess mit dem Prozess kommunizieren muss. Ein Prozess kann nur eine bestimmte Reihe von Signalen erhalten. Ganzzahlen dienen als Bezeichner für Signale. Die symbolischen Namen werden Signalnummern zugewiesen. Ein Signal, das dem übergeordneten Prozess ausgestellt wurde, wenn der Prozess eines Kindes endet.
Ein Signal wird auf einen Prozess übertragen, der das relevante Bit in den ausstehenden Signalen des Prozesses festlegt. Das Betriebssystem untersucht jedes Mal, wenn ein Prozess auf einem bestimmten Prozessor ausgeführt wird. Der Prozess wird ordnungsgemäß wieder aufgenommen und nimmt die Ausführung bei der nächsten Anweisung wieder auf, wenn keine anhängigen Signale vorhanden sind. Wenn ein oder mehrere Signale gestoppt sind, ein oder mehrere noch ausstehend sind, wird das Verfahren auch normal fortgesetzt, wobei die Signale immer noch als ausstehend angesehen werden. Wenn ein oder mehrere Signale nicht blockiert sind, sondern anhängig sind, ruft das Betriebssystem die Signalhandhabungsfunktionen im Prozess 'Code auf.
Syntax der Signalfunktion in der C -Sprache
Die Signalfunktion der C -Bibliothek erstellt mit der Signalnummer Sig einen Signalhandler oder eine Funktion. Die Deklaration der Signal () -Funktion ist im Folgenden vorgesehen:
void (*Signal (int sig, void (*func) (int))) (int)
Lassen Sie uns jede der Signalfunktionsparameter im Detail diskutieren. Die „Sig“ ist die Signalzahl, die eine Handhabungsfunktion hat, die damit verbunden ist. Hier sind einige entscheidende Standardsignalzahlen:
Der SIDABRT wird als Signal abnormale Beendigung bezeichnet, wie die von der Funktion gestartet wird. Das SIGFPE wird als Signal-Gleitkomma-Ausnahme bezeichnet. Dies ist eine unsachgemäße mathematische Operation wie eine Aufteilung durch Null oder eine überfüllte Operation (nicht immer eine Schwimmpunktoperation verwenden.)
Das Sigill ist das illegale Signal und eine ungültige Anweisung oder ein ungültiges Funktionsimage. Normalerweise ist ein Anstrengung, eine Daten- oder Codeversorgung auszuführen. Die SIGINT wird als Signalinterrupte bezeichnet, der eine wechselwirksame Aufmerksamkeitsscheibe ist. Der Benutzer der Anwendung ist normalerweise derjenige, der sie generiert. Das Sigsevg ist die Abkürzung des Verstoßes zur Signalsegmentierung und des nicht autorisierten Zugriffs auf Daten, die auftreten, wenn die Software versucht, die Daten zu lesen oder zu schreiben, die nicht in dem Speicher enthalten sind, der ihm zugeteilt wurde.
Das Sigterm ist das Akronym für die Signalabschluss, bei der das Programm einen Antrag auf Kündigung erhielt.
Ein Funktionszeiger wird durch den Parameter „Func“ dargestellt. Eine der folgenden Voreinstellungsfunktionen kann hier oder eine Funktion verwendet werden, die vom Programmierer erstellt wurde. Die SIG_DFL ist standardmäßig die Signalbehandlung. Das Signal wird durch die Standardantwort für dieses spezifische Signal behandelt. Das Sig_ign ist das Signal ignoriert. Das Signal wird ignoriert.
Beispiel 1:
Es stehen verschiedene Standard -Signal -Handler -Routinen zur Verfügung. Jedes Signal hat eine entsprechende Standard -Handler -Routine. Zu den allgemeinen Aktionen, die durch die verschiedenen Standard -Handler -Verfahren ausgeführt werden. Der Prozess sollte beendet werden. Fahren Sie fort, indem Sie einen blockierten Prozess veröffentlichen. Stoppen Sie das Verfahren, indem Sie ihn blockieren. Diese Instanz veranschaulicht den Standardsignal -Handler in der C -Sprache:
#enthalten
#enthalten
#enthalten
#enthalten
#enthalten
#enthalten
void handle_sigint (int sig)
printf ("Signalhandler");
int main ()
Signal (SIGINT, Handle_IGint);
während (1)
printf ("Hallo zu C Sprache \ n");
Schlaf (1);
Rückkehr 0;
Zusammen mit den anderen erforderlichen Header -Dateien importierten wir das „Signal.H ”Header -Datei. Das Signal.H ”Header -Datei enthält eine konstante Definition der Makro für die Signale. Die Funktion "Handle_IGint" wird konstruiert, wodurch das Ganzzahlobjekt "sig" verwendet wird. Wir haben diese Funktion in unserer Hauptfunktion bezeichnet. Die Hauptfunktion verwendete den Signalfunktionsaufruf und nimmt die beiden Argumente an: Das erste Argument ist die SIGINT für die Signalunterbrechung und das zweite Argument ist die Handle_signint für Signalhandlerzwecke. Die while -Schleife ist definiert, die über die Druckanweisung iteriert.
Die Zeichenfolge ist in der Ausgabe unendliche Zeiten gedruckt. Nach Empfang des SIGINT -Signals und der Verwendung seines Standardhandlers zum Beenden des Vorgangs kann der Benutzer Strg+C drücken, um den Prozess zu beenden.
Beispiel 2:
Mit Ausnahme von Sigkill kann ein Prozess seinen Handler -Code verwenden, um den Standard -Signal -Handler für praktisch alle Signale zu ersetzen. Jeder Name ist für eine Signalhandlerfunktion akzeptabel, muss jedoch einen Int -Parameter und einen Rückgabetyp von Hohlraum haben. Der folgende Beispielcode ist die Darstellung eines benutzerdefinierten Signalhandlers:
#enthalten
#enthalten
void handle_sigint (int sig)
printf ("Signale profitiert %d \ n", Sig);
int main ()
Signal (SIGINT, Handle_IGint);
während (1);
Rückkehr 0;
Beginnen Sie nach der Einbeziehung der Header -Datei einfach mit dem Code. Wir haben die Funktion eines Signalhandlers definiert. Der int sig -Parameter wird an die Signalhandlerfunktion übergeben. Diese Funktion ist der Handler für den SIGINT und druckt die Anweisung des Signals aus, wenn der Benutzer den Befehl „Strg+C“ eingibt. In der Hauptfunktion haben wir einen Signalsystemaufruf, der das SIGINT -Argument und das Argument "handle_IGint.
Das Programm wird in die while -Schleife verlaufen und druckt die folgende Ausgabe auf jeden Befehl „Strg+C“ aus:
Abschluss
Dieser ganze Leitfaden informiert Sie über die Signalfunktion in C. Wir haben eine Einführung in Signale in C zusammen mit einer Struktur von Signalen und ihren entsprechenden Beispielen durchgemacht. Wenn es darum geht, die ungeplanten Störungen zu beheben, die während der Ausführung eines Programms während der Laufzeit auftreten, ist der Signalbefehl der C -Sprache entscheidend. Da es als Signal für den Benutzer dient und Fehler während der Programmausführung erkennen kann, kann die Signalfunktion diese mühelos verarbeiten.