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;
}
codice:
./main
5
10
SIGUSR1 ricevuto
10
inserisco 5
stampa 10
mando tramite un altro terminale il segnale e stampa la stringa più il numero 10