Problema intercettazione segnale CTRL-C e CTRL-Z

di il
1 risposte

Problema intercettazione segnale CTRL-C e CTRL-Z

Ciao a tutti,
ho un piccolo problemino che non capisco come mai si verifica.

nel main devo inserire un intero da 1 a 5 compresi, e per fare un controllo più "sofisticato", l'ho fatto così

do{
		printf("\nScelta: ");
		while(scanf("%d", &scelta)!=1){
			while( getchar()!='\n'); //Pulisco il buffer
			printf("\nAttenzione! Devi inserire un intero.\nRiprova: ");
		}
		while( getchar()!='\n'); //Pulisco il buffer
	}while(scelta != 1 && scelta != 2 && scelta!= 3 && scelta != 4 && scelta != 5);
sempre dentro al main c'è

struct sigaction sa;
	/* Segnale CTRL-C */
    sa.sa_handler = signalHandler;
    sa.sa_flags = 0;
    sigemptyset(&sa.sa_mask);
    if (sigaction(SIGINT, &sa, NULL) == -1) { 
        perror("sigaction");
        return -1;
    }
    /* Segnale CTRL-Z */
    sa.sa_handler = signalHandler;
    sa.sa_flags = 0;
    sigemptyset(&sa.sa_mask);
    if (sigaction(SIGTSTP, &sa, NULL) == -1) {
        perror("sigaction");
        return -1;
    }
per l'intercettazione dei segnali CTRL-C e CTRL-Z.
La funzione signalHandler è

void signalHandler(int signal){
	printf("\nHo intercettato il signal handler CTRL-C o CTRL-Z\n\n");
	scelta = 5;
}
dove scelta è una variabile dichiarata volatile. scelta=5 fa entrare in un case che si occupa di disconnettere il client dal server.
Il problema è che, con il controllo sull'imput che ho fatto, se nel terminale premo CTRL-C o CTRL-Z mi stampa a schermo la print "Ho intercettato..." ma non fa niente (non disconnette).
Se invece il controllo iniziale lo sostituisco con questo, più semplice che controlla solo se inserisco numeri che si aspetta, ma va in palla se inserisco lettere

if(scelta < 1 || scelta > 5){
			do{
				printf("\nScelta: ");
				scanf("%d", &scelta);
			 }while(scelta != 1 && scelta != 2 && scelta!= 3 && scelta != 4 && scelta != 5);
}
l'intercettazione dei segnali CTRL-C o CTRL-Z funzionano

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte