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