X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=signal.tex;h=703d876a06bade859600496f050995c23e7f36ff;hp=6f6c1110e6e1be70c400a6026ada77d813345b9e;hb=2f9a4c398ce7f9c40b6f07a3d643098b6ed4ff27;hpb=e397070555910d790f746fa9d5ad995ba8537cba;ds=sidebyside diff --git a/signal.tex b/signal.tex index 6f6c111..703d876 100644 --- a/signal.tex +++ b/signal.tex @@ -1899,7 +1899,40 @@ che in certi sistemi questi possono essere diversi. In generale dunque, a meno 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}}