che non si sia vincolati allo standard ISO C, è sempre il caso di evitare
l'uso di \func{signal} a favore di \func{sigaction}.
+Per questo motivo si è provveduto, per mantenere un'interfaccia semplificata
+che abbia le stesse caratteristiche di \func{signal} a definire una funzione
+equivalente (che si trova come \code{inline} nel file \file{wrapper.h} dei
+sorgenti allegati) \code{Signal}, riportata in \figref{fig:sig_Signal_code}.
+\begin{figure}[!htb]
+ \footnotesize \centering
+ \begin{minipage}[c]{15cm}
+ \begin{lstlisting}{}
+typedef void SigFunc(int);
+inline SigFunc * Signal(int signo, SigFunc *func)
+{
+ struct sigaction new_handl, old_handl;
+ new_handl.sa_handler=func;
+ /* clear signal mask: no signal blocked during execution of func */
+ if (sigemptyset(&new_handl.sa_mask)!=0){ /* initialize signal set */
+ perror("cannot initializes the signal set to empty"); /* see mess. */
+ exit(1);
+ }
+ new_handl.sa_flags=0; /* init to 0 all flags */
+ /* change action for signo signal */
+ if (sigaction(signo,&new_handl,&old_handl)){
+ perror("sigaction failed on signal action setting");
+ exit(1);
+ }
+ return (old_handl.sa_handler);
+}
+ \end{lstlisting}
+ \end{minipage}
+ \normalsize
+ \caption{Una funzione equivalente a \func{signal} definita attraverso
+ \func{sigaction}.}
+ \label{fig:sig_Signal_code}
+\end{figure}
\subsection{La gestione della \textsl{maschera dei segnali} o
\textit{signal mask}}