Ho questo piccolo programmino che dovrebbe eseguire un ciclo infinito e per ogni numero inserito stampa il doppio.
Inoltre dovrebbe, alla ricezione del segnale SIGUSR1, stampare a schermo il messaggio "SIGUSR1 ricevuto"
Funziona tutto, solo non capisco perché ogni volta dopo la write stampa anche l'ultima cosa stampata anche dalla printf, quello a fine post è un esempio di esecuzione
codice:#include <signal.h> #include <stdio.h> #include <string.h> #include <unistd.h> /* La funzione che verrà eseguita una volta catturato il segnale */ void signalHandler(int signo) { if(signo==SIGUSR1) { write(1, "SIGUSR1 ricevuto\n", 18); } } /* Imposta l'handler passato come argomento per il segnale 'signo' */ void setSignalHandler(void (*handler)(int), int signo) { struct sigaction newAct; newAct.sa_handler=handler; sigemptyset(&newAct.sa_mask); newAct.sa_flags=0; sigaction(signo, &newAct, NULL); } int main() { int n; setSignalHandler(signalHandler, SIGUSR1); while(1) { scanf("%d", &n); printf("%d\n", 2*n); } return 0; }inserisco 5codice:./main 5 10 SIGUSR1 ricevuto 10
stampa 10
mando tramite un altro terminale il segnale e stampa la stringa più il numero 10

Rispondi quotando