Si suppone di ignorare il segnale CtrlC e usarlo per stampare un messaggio. Non dovrebbe terminare il programma.Override Ctrl-C
Cosa accade finora è che quando viene premuto Ctrl C stampa il messaggio, ma termina il programma.
Quando ho chiesto al mio professore mi ha detto di farlo: È necessario impedire al gestore del segnale di continuare a elaborare il segnale. In questo momento il segnale viene gestito dal tuo codice e quindi passa al gestore principale.
C'è un metodo che dovrei aggiungere o devo spostare gli installatori di segnale da qualche parte?
Questo è il mio codice finora:
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <signal.h>
#include "Input.h"
#include "CircleBuff.h"
//void handler_function(int signal_id);
void catch_int(int sig_num){
//reset the signal handler again to catch_int, for next time
signal(SIGINT, catch_int);
//print message
printf("Print History");
fflush(stdout);
}
void printHistory(CircleBuff hist){
cout << "Complete History:\n" << endl;
hist.print();
cout << endl;
}
int main(int argc, char** argv){
struct sigaction signal_action; /* define table */
signal_action.sa_handler = catch_int; /* insert handler function */
signal_action.sa_flags = 0; /* init the flags field */
sigemptyset(&signal_action.sa_mask); /* are no masked interrupts */
sigaction(SIGINT, &signal_action, NULL); /* install the signal_action */
do{
//My code: where the value report will be assigned within.
} while(report != 1)
}
NON chiamare "printf' dall'interno di un gestore di segnale perché" printf' non è async-safe. Vedi 'segnale uomo 7' per un elenco di funzioni sicure asincrone. Il più semplice syscall 'write' è async safe, ma nessuna delle funzioni' '' è. –