C-Programmierung

So verwenden Sie SIGALRM und die Alarmfunktion in der Sprache C?

So verwenden Sie SIGALRM und die Alarmfunktion in der Sprache C?
Das Alarm() Funktion wird verwendet, um a . zu erzeugen SIGALRM Signal nach Ablauf einer bestimmten Zeit. In diesem Artikel zeigen wir Ihnen, wie Sie es verwenden Alarm() Funktion und SIGALRM Signal unter Linux. Also lasst uns anfangen.

Syntax

unsigned int alarm (unsigned int sekunden)

Die Funktion ist definiert in unistd.ha Header-Datei.

Argumente

Die Funktion benötigt ein Argument, Sekunden. Nach dem Sekunden Sekunden sind seit der Anforderung des Alarm() Funktion, die SIGALRM Signal wird erzeugt. Das Standardverhalten beim Empfang von SIGALRM ist, den Prozess zu beenden. Aber wir können das Signal einfangen und verarbeiten. Siehe Signalhandhabungsdetails.

Das Alarm() Die Funktion gibt einen Wert ungleich Null zurück, wenn zuvor ein anderer Alarm eingestellt wurde und der Wert die Anzahl der Sekunden ist, die für den vorherigen geplanten Alarm aufgrund der Lieferung verbleiben. Andernfalls Alarm() wird null zurückgeben.

Beispiel 1.c:

#einschließen
#einschließen
#einschließen
 
void sig_handler(int signum)
 
printf("Innere Handler-Funktion\n");

 
int main()
 
signal(SIGALRM,sig_handler); // Signalhandler registrieren
 
Alarm (2); // Geplanter Alarm nach 2 Sekunden
 
for(int i=1;;i++)
 
printf("%d : Innerhalb der Hauptfunktion\n",i);
Schlaf (1); // Verzögerung für 1 Sekunde

0 zurückgeben;

Im Screenshot der Ausgabe von Beispiel 1.c, Das Programm wird mit dem Befehl time ausgeführt, damit wir uns einen Überblick über die Ausführungszeit des Programms verschaffen können. Wir haben beobachtet, dass wir in der Hauptfunktion Alarm() Funktion, geplant für 2 Sekunden. Also, die for-Schleife wird ausgeführt, nach 2 Sekunden wird die sig_handler-Funktion aufgerufen und die Ausführung der Hauptfunktion wird angehalten. Nach Ausführung der sig_handler-Funktion wird die Hauptfunktion für die Schleifenausführung wieder aufgenommen. Hier verwenden wir die Schlaffunktion zum Verzögern, damit wir den Ablauf der Ausführung verstehen können. Die for-Schleife ist eine Endlosschleife, wenn wir eine Unterbrechungstaste (Strg+C) drücken, wird die Ausführung beendet.

Erstellen SIGALRM mit Signal() Funktion kann nicht gestapelt werden. Einziger SIGALRM Generation kann geplant werden. Aufeinanderfolgende Anrufe von Signal() Funktion den Wecker des aufrufenden Prozesses zurücksetzen.

Beispiel2.c:

#einschließen
#einschließen
#einschließen
 
void sig_handler(int signum)
 
printf("Innere Handler-Funktion\n");

 
int main()
 
signal(SIGALRM,sig_handler); // Signalhandler registrieren
 
Alarm (4); // Geplanter Alarm nach 4 Sekunden
Alarm (1); // Geplanter Alarm nach 1 Sekunde
 
for(int i=1;;i++)
 
printf("%d : Innerhalb der Hauptfunktion\n",i);
Schlaf (1); // Verzögerung für 1 Sekunde

 
0 zurückgeben;

Im Screenshot der Ausgabe von Beispiel2.c, Wir können sehen, dass das Programm länger als 7 Sekunden ausgeführt wurde, aber der erste Alarm, der nach 4 Sekunden geplant war, ruft die Handler-Funktion nicht auf. Der zweite Alarm, der nach 1 Sekunde geplant wurde, wird den Alarm zurückgesetzt.

Wenn der Wert des Arguments Sekunden Null ist, wird jede zuvor gestellte Alarmanforderung abgebrochen.

Beispiel3.c:

#einschließen
#einschließen
#einschließen
 
void sig_handler(int signum)
 
printf("Innere Handler-Funktion\n");

 
int main()
 
signal(SIGALRM,sig_handler); // Signalhandler registrieren
 
Alarm (2); // Geplanter Alarm nach 2 Sekunden
Alarm(0); // Den vorherigen Alarm abgebrochen
 
for(int i=1;;i++)
 
printf("%d : Innerhalb der Hauptfunktion\n",i);
Schlaf (1); // Verzögerung für 1 Sekunde

 
0 zurückgeben;

Im Screenshot der Ausgabe von Beispiel3.c, Wir können sehen, dass der erste Alarm, der nach 2 Sekunden geplant war, wegen des zweiten Alarms für 0 Sekunden abgebrochen wird.

Im Beispiel4.c wir werden sehen, wie kontinuierlich wir alle 2 Sekunden einen Alarm einstellen können.

Beispiel4.c:

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

 
int main()
 
signal(SIGALRM,sig_handler); // Signalhandler registrieren
 
Alarm (2); // Planen Sie den ersten Alarm nach 2 Sekunden
 
for(int i=1;;i++)
 
printf("%d : Innerhalb der Hauptfunktion\n",i);
Pause(); // warten, bis das Signal verarbeitet wird

 
0 zurückgeben;

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

Im Beispiel5.c wir werden sehen, wie wir den bereits geplanten Alarm verzögern können. Wir verwenden das SIGINT-Signal für Interrupt. Wenn der Benutzer Strg+C in die Tastatur eingibt, UNTERSCHRIFT Signal wird erzeugt.

Beispiel5.c:

#einschließen
#einschließen
#einschließen
 
void sig_handler(int signum)
 
if(signum == SIGALRM)         //Signalhandler für SIGALRM
 
printf("Innere Handlerfunktion 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
 
for(int i=1;;i++)
 
printf("%d : Innerhalb der Hauptfunktion\n",i);
Pause(); // warten, bis das Signal verarbeitet wird

 
0 zurückgeben;

Im Screenshot der Ausgabe von Beispiel5.c, Wir können sehen, dass der Alarm 5 Sekunden zurückgesetzt wird, wenn der Benutzer Strg + C eingibt. In diesem Programm haben wir nur eine Handler-Funktion für zwei verschiedene Signale verwendet, aber in der Handler-Funktion wurde überprüft, für welches Signal die Handler-Funktion aufgerufen wird.

Fazit:

Wir haben also gesehen, wie die Alarmfunktion für das Auslösen von Signalen eingestellt werden kann, wie man den Alarm zurücksetzt, wie man einen bereits geplanten Alarm abbricht.

So kehren Sie die Scrollrichtung von Maus und Touchpads in Windows 10 um
Maus und Touchpads machen das Rechnen nicht nur einfach, sondern auch effizienter und weniger zeitaufwendig. Wir können uns ein Leben ohne diese Gerät...
So ändern Sie Mauszeiger- und Cursorgröße, Farbe und Schema unter Windows 10
Der Mauszeiger und der Cursor in Windows 10 sind sehr wichtige Aspekte des Betriebssystems. Dies kann auch für andere Betriebssysteme gesagt werden, a...
Kostenlose und Open-Source-Spiele-Engines für die Entwicklung von Linux-Spielen
Dieser Artikel behandelt eine Liste von kostenlosen und Open-Source-Spiele-Engines, die für die Entwicklung von 2D- und 3D-Spielen unter Linux verwend...