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.