Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C++ Signaalverwerking

Signalen zijn de onderbrekingen die door het besturingssysteem aan een proces worden geleverd en die een programma voortijdig kunnen beëindigen. U kunt interrupts genereren door op Ctrl+C te drukken op een UNIX-, LINUX-, Mac OS X- of Windows-systeem.

Er zijn signalen die niet door het programma kunnen worden opgevangen, maar er is een lijst met signalen die u in uw programma kunt opvangen en op basis van het signaal passende acties kunt ondernemen. Deze signalen zijn gedefinieerd in het C++ headerbestand .

Zr.Nee Signaal en beschrijving
1

SIGABRT

Abnormale beëindiging van het programma, zoals een oproep om af te breken .

2

SIGFPE

Een foutieve rekenkundige bewerking, zoals delen door nul of een bewerking die resulteert in overflow.

3

SIGILL

Detectie van een illegale instructie.

4

SIGINT

Ontvangst van een interactief attentiesignaal.

5

SIGSEGV

Een ongeldige toegang tot opslag.

6

SIGTERM

Een beëindigingsverzoek verzonden naar het programma.

De signaal() Functie

C++ signaalverwerkingsbibliotheek biedt functie signaal onverwachte gebeurtenissen te vangen. Hieronder volgt de syntaxis van de signal()-functie −

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

Om het simpel te houden, ontvangt deze functie twee argumenten:het eerste argument als een geheel getal dat het signaalnummer vertegenwoordigt en het tweede argument als een verwijzing naar de signaalverwerkingsfunctie.

Laten we een eenvoudig C++-programma schrijven waarin we het SIGINT-signaal vangen met de functie signal(). Welk signaal u ook in uw programma wilt opvangen, u moet dat signaal registreren met signaal functie en associeer deze met een signaalbehandelaar. Bekijk het volgende voorbeeld −

#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;
}

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, levert dit het volgende resultaat op −

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

Druk nu op Ctrl+c om het programma te onderbreken en je zult zien dat je programma het signaal zal opvangen en eruit zou komen door iets als volgt af te drukken −

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

De functie raise()

U kunt signalen genereren met de functie raise() , die een geheel getal als argument neemt en de volgende syntaxis heeft.

int raise (signal sig);

Hier, sig is het signaalnummer om een ​​van de signalen te verzenden:SIGINT, SIGABRT, SIGFPE, SIGILL, SIGSEGV, SIGTERM, SIGHUP. Hieronder volgt het voorbeeld waarin we een signaal intern verhogen met de functie raise() als volgt −

#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;
}

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, levert dit het volgende resultaat op en wordt het automatisch weergegeven −

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

C Taal

  1. C++-gegevenstypen
  2. C++-operators
  3. C++ Opmerkingen
  4. C++-klassesjablonen
  5. C Bestandsverwerking
  6. C++ Exception Handling:Try, Catch, Throw Voorbeeld
  7. C - Foutafhandeling
  8. C++-overzicht
  9. C++-constanten/letters
  10. Operatoren in C++
  11. Getallen in C++