Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

C++-Signalverarbeitung

Signale sind die vom Betriebssystem an einen Prozess gelieferten Interrupts, die ein Programm vorzeitig beenden können. Sie können Interrupts generieren, indem Sie auf einem UNIX-, LINUX-, Mac OS X- oder Windows-System Strg+C drücken.

Es gibt Signale, die vom Programm nicht abgefangen werden können, aber es gibt eine folgende Liste von Signalen, die Sie in Ihrem Programm abfangen und basierend auf dem Signal entsprechende Maßnahmen ergreifen können. Diese Signale sind in der C++-Header-Datei .

definiert
Sr.No Signal &Beschreibung
1

SIGABRT

Abnormale Beendigung des Programms, wie z. B. ein Aufruf zum abort .

2

SIGFPE

Eine fehlerhafte arithmetische Operation, wie z. B. eine Division durch Null oder eine Operation, die zu einem Überlauf führt.

3

Siegel

Erkennung einer illegalen Anweisung.

4

SIGNAL

Empfang eines interaktiven Aufmerksamkeitssignals.

5

SIGSEGV

Ein ungültiger Zugriff auf den Speicher.

6

SIGTERM

Eine an das Programm gesendete Beendigungsanforderung.

Die signal()-Funktion

Die C++-Signalverarbeitungsbibliothek stellt die Funktion signal bereit um unerwartete Ereignisse abzufangen. Es folgt die Syntax der Funktion signal() −

void (*signal (int sig, void (*func)(int)))(int); 

Um es einfach zu halten, erhält diese Funktion zwei Argumente:das erste Argument als Ganzzahl, die die Signalnummer darstellt, und das zweite Argument als Zeiger auf die Signalverarbeitungsfunktion.

Lassen Sie uns ein einfaches C++-Programm schreiben, in dem wir das SIGINT-Signal mit der Funktion signal() abfangen. Welches Signal Sie auch immer in Ihrem Programm abfangen möchten, Sie müssen dieses Signal mit Signal registrieren -Funktion und verknüpfen Sie sie mit einem Signal-Handler. Untersuchen Sie das folgende Beispiel −

#include <iostream>
#include <csignal>

using namespace std;

void signalHandler( int signum ) {
   cout << "Interrupt signal (" << signum << ") received.\n";

   // cleanup and close up stuff here  
   // terminate program  

   exit(signum);  
}

int main () {
   // register signal SIGINT and signal handler  
   signal(SIGINT, signalHandler);  

   while(1) {
      cout << "Going to sleep...." << endl;
      sleep(1);
   }

   return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis −

Going to sleep....
Going to sleep....
Going to sleep....

Drücken Sie jetzt Strg+c, um das Programm zu unterbrechen, und Sie werden sehen, dass Ihr Programm das Signal abfangen und etwas wie folgt ausgeben würde −

Going to sleep....
Going to sleep....
Going to sleep....
Interrupt signal (2) received.

Die Funktion raise()

Sie können Signale mit der Funktion raise() erzeugen , das eine ganzzahlige Signalnummer als Argument akzeptiert und die folgende Syntax hat.

int raise (signal sig);

Hier, unterschreiben ist die Signalnummer, um eines der Signale zu senden:SIGINT, SIGABRT, SIGFPE, SIGILL, SIGSEGV, SIGTERM, SIGHUP. Im Folgenden sehen Sie ein Beispiel, in dem wir ein Signal intern mit der Funktion raise() wie folgt erhöhen:−

#include <iostream>
#include <csignal>

using namespace std;

void signalHandler( int signum ) {
   cout << "Interrupt signal (" << signum << ") received.\n";

   // cleanup and close up stuff here  
   // terminate program  

   exit(signum);  
}

int main () {
   int i = 0;
   // register signal SIGINT and signal handler  
   signal(SIGINT, signalHandler);  

   while(++i) {
      cout << "Going to sleep...." << endl;
      if( i == 3 ) {
         raise( SIGINT);
      }
      sleep(1);
   }

   return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis und würde automatisch herauskommen −

Going to sleep....
Going to sleep....
Going to sleep....
Interrupt signal (2) received.

C Sprache

  1. C++-Datentypen
  2. C++-Operatoren
  3. C++-Kommentare
  4. C++-Klassenvorlagen
  5. C Dateiverwaltung
  6. C++-Ausnahmebehandlung:Try, Catch, Throw Beispiel
  7. C - Fehlerbehandlung
  8. C++-Übersicht
  9. C++ Konstanten/Literale
  10. Operatoren in C++