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