So verwenden Sie SigalRM und Alarmfunktion in der C -Sprache?

So verwenden Sie SigalRM und Alarmfunktion in der C -Sprache?
Der Alarm() Funktion wird verwendet, um a zu generieren Sigalrm Signal nach verstrichener Zeitspanne. In diesem Artikel zeigen wir Ihnen, wie Sie benutzen können Alarm() Funktion und Sigalrm Signal unter Linux. Also lasst uns anfangen.

Syntax

Unsigned Int Alarm (nicht signierte int Sekunden)

Die Funktion ist in definiert in Unistd.H Header-Datei.

Argumente

Die Funktion nimmt ein Argument an, Sekunden. Nach Sekunden Sekunden sind seit der Anforderung der Anforderung des Alarm() Funktion, die Sigalrm Signal wird erzeugt. Das Standardverhalten nach Erhalt von Sigalrm ist, den Prozess zu beenden. Aber wir können das Signal fangen und umgehen. Siehe Details zur Handhabung der Signalabwicklung.

Der Alarm() Die Funktion gibt einen Nicht -Nullwert zurück, wenn zuvor ein anderer Alarm festgelegt wurde und der Wert die Anzahl der verbleibenden Sekunden für den vorherigen geplanten Alarm aufgrund der gelieferten. Ansonsten Alarm() wird Null zurückgeben.

Beispiel 1.C:

#enthalten
#enthalten
#enthalten
void sig_handler (int signum)
printf ("Inside Handler -Funktion \ n");

int main ()
Signal (SigalRM, Sig_handler); // Signalhandler registrieren
Alarm (2); // geplanter Alarm nach 2 Sekunden
für (int i = 1 ;; i ++)
printf ("%d: Innerhalb der Hauptfunktion \ n", i);
Schlaf (1); // Verzögerung für 1 Sekunde

Rückkehr 0;

Im Screenshot der Ausgabe von Beispiel 1.C, Das Programm wird mit dem Befehl Time ausgeführt, sodass wir einen Überblick über die Ausführungszeit des Programms erhalten können. Wir haben beobachtet, dass wir in der Hauptfunktion aufrufen Alarm() Funktion, geplant für 2 Sekunden. Für die Schleife wird also nach 2 Sekunden Sig_handler -Funktion aufgerufen und die Ausführung der Hauptfunktion wird angehalten. Nach Ausführung der Funktion SIG_Handler wird in der Hauptfunktion für die Schleifenausführung wieder aufgenommen. Hier verwenden wir die Schlaffunktion zur Verzögerung, damit wir den Fluss der Ausführung verstehen können. Die for -Schleife ist eine unendliche Schleife. Wenn wir eine Interrupt -Taste (Strg+C) drücken, wird die Ausführung gestoppt.

Erstellen Sigalrm Verwendung Signal() Funktion kann nicht gestapelt werden. Einziger Sigalrm Generation kann geplant werden. Aufeinanderfolgende Anrufe von Signal() Funktion setzen Sie den Wecker des Aufrufprozesses zurück.

Beispiel2.C :

#enthalten
#enthalten
#enthalten
void sig_handler (int signum)
printf ("Inside Handler -Funktion \ n");

int main ()
Signal (SigalRM, Sig_handler); // Signalhandler registrieren
Alarm (4); // geplanter Alarm nach 4 Sekunden
Alarm (1); // geplanter Alarm nach 1 Sekunden
für (int i = 1 ;; i ++)
printf ("%d: Innerhalb der Hauptfunktion \ n", i);
Schlaf (1); // Verzögerung für 1 Sekunde

Rückkehr 0;

Im Screenshot der Ausgabe von Beispiel2.C, Wir können sehen, dass das Programm mehr als 7 Sekunden ausgeführt wurde, aber der erste Alarm, der nach 4 Sekunden geplant war. Der zweite Alarm, der nach 1 Sekunde geplant war.

Wenn der Wert der Argumentsekunden Null ist, wird eine zuvor gemachte Alarmanforderung storniert.

Beispiel3.C:

#enthalten
#enthalten
#enthalten
void sig_handler (int signum)
printf ("Inside Handler -Funktion \ n");

int main ()
Signal (SigalRM, Sig_handler); // Signalhandler registrieren
Alarm (2); // geplanter Alarm nach 2 Sekunden
Alarm (0); // den vorherigen Alarm storniert
für (int i = 1 ;; i ++)
printf ("%d: Innerhalb der Hauptfunktion \ n", i);
Schlaf (1); // Verzögerung für 1 Sekunde

Rückkehr 0;

Im Screenshot der Ausgabe von Beispiel3.C, Wir können sehen, dass der erste Alarm, der nach 2 Sekunden geplant war.

In Beispiel4.C Wir werden sehen, wie kontinuierlich wir alle 2 Sekunden einen Alarm einstellen können.

Beispiel4.C:

#enthalten
#enthalten
#enthalten
void sig_handler (int signum)
printf ("Inside Handler -Funktion \ n");
Alarm (2); // Planen Sie nach 2 Sekunden einen neuen Alarm

int main ()
Signal (SigalRM, Sig_handler); // Signalhandler registrieren
Alarm (2); // Planen Sie den ersten Alarm nach 2 Sekunden
für (int i = 1 ;; i ++)
printf ("%d: Innerhalb der Hauptfunktion \ n", i);
Pause(); // Warten, bis das Signal behandelt wird

Rückkehr 0;

Im Screenshot der Ausgabe von Beispiel4.C, Wir können sehen, dass der Alarm in alle 2 Sekunden kontinuierlich ist. Wir setzen den Alarm in der Funktion SIG_Handler zurück.

In Beispiel5.C Wir werden sehen, wie wir den bereits geplanten Alarm verzögern können. Wir werden SIGINT -Signal für Interrupt verwenden. Wenn Benutzer -Taste in der Tastatur Taste tippen, Sigint Signal erzeugt.

Beispiel5.C:

#enthalten
#enthalten
#enthalten
void sig_handler (int signum)
if (signum == sigalrm) // Signalhandler für SigalRM
printf ("Inside Handler -Funktion für Sigalrm \ n");
Alarm (2);

if (signum == sigint) // Signalhandler für SIGINT
printf ("\ nsnoozing für 5 Sekunden ... \ n");
Alarm (5);


int main ()
Signal (SigalRM, Sig_handler); // Signalhandler für SigalRM registrieren
Signal (SIGINT, SIG_Handler); // Signalhandler für SIGINT registrieren
Alarm (2); // Planen Sie den ersten Alarm nach 2 Sekunden
für (int i = 1 ;; i ++)
printf ("%d: Innerhalb der Hauptfunktion \ n", i);
Pause(); // Warten, bis das Signal behandelt wird

Rückkehr 0;

Im Screenshot der Ausgabe von Beispiel5.C, Wir sehen. In diesem Programm haben wir nur eine Handler -Funktion für zwei verschiedene Signale verwendet, aber in der Handler -Funktion wurde überprüft, dass die Handler -Funktion aufgerufen wird.

Abschluss:

Wir haben also gesehen, dass die Alarmfunktion für das Auslösen von Signal eingestellt werden kann, wie Alarm zurückgesetzt wird, wie man bereits geplante Alarm absagt.