supone que tengo anular el CtrlC señal y lo utilizan para imprimir un mensaje. No se supone que termine el programa.Invalidar Ctrl-C
¿Qué ocurre hasta ahora es que cuando se pulsa Ctrl C imprime el mensaje, pero que termine el programa.
Cuando le pregunté a mi profesor me dijo que hiciera esto: Necesita hacer que su manejador de señal evite continuar procesando la señal. En este momento, la señal está siendo manejada por su código y luego pasando al controlador principal.
¿Hay algún método que deba agregar o necesito mover los instaladores de señal en algún lugar?
Este es mi código hasta ahora:
#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)
}
NO debe llamar a 'printf' desde dentro de un manejador de señal porque' printf' no es asincrónico. Ver 'man 7 signal' para una lista de funciones async-safe. La llamada más simple de 'write' es asíncrona segura, pero ninguna de las funciones '' son. –