Latest web development tutorials

C ++ elaborazione del segnale

Il segnale è passato dal sistema operativo, il processo viene interrotto, sarà risoluzione anticipata di un programma. In UNIX, Linux, Mac OS X o sistemi Windows, è possibile premere Ctrl + C interrupt.

Alcuni segnali possono essere catturati procedure, ma elencati nella tabella sotto del segnale può essere catturato nel programma, e può intraprendere azioni appropriate sulla base del segnale. Questi segnali sono definiti nel C ++ file di intestazione <csignal> a.

信号 描述
SIGABRT 程序的异常终止,如调用abort
SIGFPE 错误的算术运算,比如除以零或导致溢出的操作。
SIGILL 检测非法指令。
SIGINT 接收到交互注意信号。
SIGSEGV 非法访问内存。
SIGTERM 发送到程序的终止请求。

segnale function ()

libreria C ++ fornisce ilsegnale funzione di elaborazione del segnale per catturare le emergenze.Quanto segue è la funzione del segnale di sintassi ():

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

Questa funzione accetta due parametri: il primo parametro è un numero intero che rappresenta il numero di un segnale; secondo parametro è un puntatore a una funzione di elaborazione del segnale.

Scriviamo un semplice programma in C ++ che utilizza la funzione di segnale () per catturare il segnale SIGINT. Non importa ciò che si desidera catturare il segnale nel programma, è necessario utilizzare la funzione disegnale per registrare il segnale e l'elaborazione del segnale associato al programma.Considerate i seguenti esempi:

#include <iostream>
#include <csignal>

using namespace std;

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

    // 清理并关闭
    // 终止程序  

   exit(signum);  

}

int main ()
{
    // 注册信号 SIGINT 和信号处理程序
    signal(SIGINT, signalHandler);  

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

    return 0;
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

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

Ora, premere Ctrl + C per interrompere il programma, vedrete la cattura segnale del programma, e uscire dal programma per stampare il seguente:

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

aumentare function ()

È possibile utilizzare ilrilancio function ()genera un segnale, la funzione di segnale impiega un numero intero come parametro, la seguente sintassi:

int raise (signal sig);

Qui, sig è il segnale da trasmettere numeri Questi segnali includono: SIGINT, SIGABRT, SIGFPE, SIGILL , SIGSEGV, SIGTERM, SIGHUP.Ecco cosa si usa il rilancio () funzione genera un segnale all'interno di un'istanza:

#include <iostream>
#include <csignal>

using namespace std;

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

    // 清理并关闭
    // 终止程序 

   exit(signum);  

}

int main ()
{
    int i = 0;
    // 注册信号 SIGINT 和信号处理程序
    signal(SIGINT, signalHandler);  

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

    return 0;
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati, e uscirà automaticamente:

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