C++ problema cattura segnale SIGINT

di il
1 risposte

C++ problema cattura segnale SIGINT

Ciao a tutti, ho un problema catturando il segnale SIGINT, il programmino (stupido) deve catturare in un ciclo while(1) tale segnale alla pressione della combinazione ctrl+c, scrivere in output il valore della variabile i e poi uscire, ma all'avvio del file compilato il programma esegue subito la procedura di gestione del segnale senza che prema ctrl+c... cosa sbaglio?

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

int mia(int i){
	printf("%i\n",i);
	exit(1);
}

int main(){
	int i = 1;
	signal(SIGINT,mia(i));
	while(1);
}

1 Risposte

  • Re: C++ problema cattura segnale SIGINT

    Esegue subito la tua signal_handler mia in quanto chiami la funzione invece di passare l'indirizzo.
    
       signal(SIGINT,mia);
    
    Nella struttura sigaction il tuo puntatore a funzione è così dichiarato:
    
       ...
       void (*sa_handler)(int); 
       ...
    
    Il parametro int che vedi è riferito al passaggio dell'azione ricevuta e non della tua variabile i.
    Per cui la tua handler riceverà un int del segnale ricevuto.

    EDIT:
    Tieni presente che i segnali sono dipendenti dal sistema operativo.
    Nel mio sistema Linux leggo nella struct sigaction definizioni extra legate al POSIX199309 e al flag SA_SIGINFO:
    
       void (*sa_sigaction) (int, siginfo_t *, void *);
    
    ~Max
Devi accedere o registrarti per scrivere nel forum
1 risposte