-real-time e per tutti quelli inviati tramite \func{kill}, informazioni circa
-l'origine del segnale (se generato dal kernel, da un timer, da \func{kill},
-ecc.). Alcuni segnali però usano \var{si\_code} per fornire una informazione
-specifica: ad esempio i vari segnali di errore (\macro{SIGFPE},
-\macro{SIGILL}, \macro{SIGBUS} e \macro{SIGSEGV}) lo usano per fornire
-maggiori dettagli riguardo l'errore (come il tipo di errore aritmetico, di
-istruzione illecita o di violazione di memoria) mentre alcuni segnali di
-controllo (\macro{SIGCHLD}, \macro{SIGTRAP} e \macro{SIGPOLL}) forniscono
-altre informazioni speecifiche. In tutti i casi il valore del campo è
-riportato attraverso delle costanti (le cui definizioni si trovano
-\file{bits/siginfo.h}) il cui elenco dettagliato è disponibile nella man page
-di \func{sigaction}.
-
-Il resto della struttura è definito come \ctyp{union} ed i valori
-eventualmente presenti dipendono dal segnale, così \macro{SIGCHLD} ed i
-segnali real-time (vedi \secref{sec:sig_real_time}) inviati tramite
-\func{kill} avvalorano \var{si\_pid} e \var{si\_uid} coi valori corrispondenti
-al processo che ha emesso il segnale, \macro{SIGILL}, \macro{SIGFPE},
-\macro{SIGSEGV} e \macro{SIGBUS} avvalorano \var{si\_addr} con l'indirizzo cui
-è avvenuto l'errore, \macro{SIGIO} (vedi \secref{sec:file_asyncronous_io})
-avvalora \var{si\_fd} con il numero del file descriptor e \var{si\_band} per i
-dati urgenti su un socket.
-
-Benché sia possibile usare nello stesso programma sia \func{sigaction} che
+\textit{real-time} e per tutti quelli inviati tramite da un processo con
+\func{kill} o affini, le informazioni circa l'origine del segnale stesso, ad
+esempio se generato dal kernel, da un timer, da \func{kill}, ecc. Il valore
+viene sempre espresso come una costante,\footnote{le definizioni di tutti i
+ valori possibili si trovano in \file{bits/siginfo.h}.} ed i valori possibili
+in questo caso sono riportati in tab.~\ref{tab:sig_si_code_generic}.
+
+Nel caso di alcuni segnali però il valore di \var{si\_code} viene usato per
+fornire una informazione specifica relativa alle motivazioni della ricezione
+dello stesso; ad esempio i vari segnali di errore (\signal{SIGILL},
+\signal{SIGFPE}, \signal{SIGSEGV} e \signal{SIGBUS}) lo usano per fornire
+maggiori dettagli riguardo l'errore, come il tipo di errore aritmetico, di
+istruzione illecita o di violazione di memoria; mentre alcuni segnali di
+controllo (\signal{SIGCHLD}, \signal{SIGTRAP} e \signal{SIGPOLL}) forniscono
+altre informazioni specifiche.
+
+\begin{table}[!htb]
+ \footnotesize
+ \centering
+ \begin{tabular}[c]{|l|p{10cm}|}
+ \hline
+ \textbf{Valore} & \textbf{Significato} \\
+ \hline
+ \hline
+ \constd{SI\_USER} & Generato da \func{kill} o \func{raise} o affini.\\
+ \constd{SI\_KERNEL} & Inviato direttamente dal kernel.\\
+ \constd{SI\_QUEUE} & Inviato con \func{sigqueue} (vedi
+ sez.~\ref{sec:sig_real_time}).\\
+ \constd{SI\_TIMER} & Scadenza di un \textit{POSIX timer} (vedi
+ sez.~\ref{sec:sig_timer_adv}).\\
+ \constd{SI\_MESGQ} & Inviato al cambiamento di stato di una coda di
+ messaggi POSIX (vedi sez.~\ref{sec:ipc_posix_mq}),
+ introdotto con il kernel 2.6.6.\\
+ \constd{SI\_ASYNCIO}& Una operazione di I/O asincrono (vedi
+ sez.~\ref{sec:file_asyncronous_io}) è stata
+ completata.\\
+ \constd{SI\_SIGIO} & Segnale di \signal{SIGIO} da una coda (vedi
+ sez.~\ref{sec:file_asyncronous_operation}).\\
+ \constd{SI\_TKILL} & Inviato da \func{tkill} o \func{tgkill} (vedi
+ sez.~\ref{cha:thread_xxx}), introdotto con il kernel
+ 2.4.19.\\
+ \hline
+ \end{tabular}
+ \caption{Valori del campo \var{si\_code} della struttura \struct{sigaction}
+ per i segnali generici.}
+ \label{tab:sig_si_code_generic}
+\end{table}
+
+
+In questo caso il valore del campo \var{si\_code} deve essere verificato nei
+confronti delle diverse costanti previste per ciascuno di detti segnali; dato
+che si tratta di costanti, e non di una maschera binaria, i valori numerici
+vengono riutilizzati e ciascuno di essi avrà un significato diverso a seconda
+del segnale a cui è associato.
+
+L'elenco dettagliato dei nomi di queste costanti è riportato nelle diverse
+sezioni di tab.~\ref{tab:sig_si_code_special} che sono state ordinate nella
+sequenza in cui si sono appena citati i rispettivi segnali, il prefisso del
+nome indica comunque in maniera diretta il segnale a cui le costanti fanno
+riferimento.
+
+\begin{table}[!htb]
+ \footnotesize
+ \centering
+ \begin{tabular}[c]{|l|p{8cm}|}
+ \hline
+ \textbf{Valore} & \textbf{Significato} \\
+ \hline
+ \hline
+ \constd{ILL\_ILLOPC} & Codice di operazione illegale.\\
+ \constd{ILL\_ILLOPN} & Operando illegale.\\
+ \constd{ILL\_ILLADR} & Modo di indirizzamento illegale.\\
+ \constd{ILL\_ILLTRP} & Trappola di processore illegale.\\
+ \constd{ILL\_PRVOPC} & Codice di operazione privilegiato.\\
+ \constd{ILL\_PRVREG} & Registro privilegiato.\\
+ \constd{ILL\_COPROC} & Errore del coprocessore.\\
+ \constd{ILL\_BADSTK} & Errore nello stack interno.\\
+ \hline
+ \constd{FPE\_INTDIV} & Divisione per zero intera.\\
+ \constd{FPE\_INTOVF} & Overflow intero.\\
+ \constd{FPE\_FLTDIV} & Divisione per zero in virgola mobile.\\
+ \constd{FPE\_FLTOVF} & Overflow in virgola mobile.\\
+ \constd{FPE\_FLTUND} & Underflow in virgola mobile.\\
+ \constd{FPE\_FLTRES} & Risultato in virgola mobile non esatto.\\
+ \constd{FPE\_FLTINV} & Operazione in virgola mobile non valida.\\
+ \constd{FPE\_FLTSUB} & Mantissa? fuori intervallo.\\
+ \hline
+ \constd{SEGV\_MAPERR} & Indirizzo non mappato.\\
+ \constd{SEGV\_ACCERR} & Permessi non validi per l'indirizzo.\\
+ \hline
+ \constd{BUS\_ADRALN} & Allineamento dell'indirizzo non valido.\\
+ \constd{BUS\_ADRERR} & Indirizzo fisico inesistente.\\
+ \constd{BUS\_OBJERR} & Errore hardware sull'indirizzo.\\
+ \hline
+ \constd{TRAP\_BRKPT} & Breakpoint sul processo.\\
+ \constd{TRAP\_TRACE} & Trappola di tracciamento del processo.\\
+ \hline
+ \constd{CLD\_EXITED} & Il figlio è uscito.\\
+ \constd{CLD\_KILLED} & Il figlio è stato terminato.\\
+ \constd{CLD\_DUMPED} & Il figlio è terminato in modo anormale.\\
+ \constd{CLD\_TRAPPED} & Un figlio tracciato ha raggiunto una trappola.\\
+ \constd{CLD\_STOPPED} & Il figlio è stato fermato.\\
+ \constd{CLD\_CONTINUED}& Il figlio è ripartito.\\
+ \hline
+ \constd{POLL\_IN} & Disponibili dati in ingresso.\\
+ \constd{POLL\_OUT} & Spazio disponibile sul buffer di uscita.\\
+ \constd{POLL\_MSG} & Disponibili messaggi in ingresso.\\
+ \constd{POLL\_ERR} & Errore di I/O.\\
+ \constd{POLL\_PRI} & Disponibili dati di alta priorità in ingresso.\\
+ \constd{POLL\_HUP} & Il dispositivo è stato disconnesso.\\
+ \hline
+ \end{tabular}
+ \caption{Valori del campo \var{si\_code} della struttura \struct{sigaction}
+ impostati rispettivamente dai segnali \signal{SIGILL}, \signal{SIGFPE},
+ \signal{SIGSEGV}, \signal{SIGBUS}, \signal{SIGCHLD}, \signal{SIGTRAP} e
+ \signal{SIGPOLL}/\signal{SIGIO}.}
+ \label{tab:sig_si_code_special}
+\end{table}
+
+Il resto della struttura \struct{siginfo\_t} è definito come una \dirct{union}
+ed i valori eventualmente presenti dipendono dal segnale ricevuto, così
+\signal{SIGCHLD} ed i segnali \textit{real-time} (vedi
+sez.~\ref{sec:sig_real_time}) inviati tramite \func{kill} avvalorano
+\var{si\_pid} e \var{si\_uid} coi valori corrispondenti al processo che ha
+emesso il segnale, \signal{SIGCHLD} avvalora anche i campi \var{si\_status},
+\var{si\_utime} e \var{si\_stime} che indicano rispettivamente lo stato di
+uscita, l'\textit{user time} e il \textit{system time} (vedi
+sez.~\ref{sec:sys_cpu_times}) usati dal processo; \signal{SIGILL},
+\signal{SIGFPE}, \signal{SIGSEGV} e \signal{SIGBUS} avvalorano \var{si\_addr}
+con l'indirizzo in cui è avvenuto l'errore, \signal{SIGIO} (vedi
+sez.~\ref{sec:file_asyncronous_io}) avvalora \var{si\_fd} con il numero del
+file descriptor e \var{si\_band} per i dati urgenti (vedi
+sez.~\ref{sec:TCP_urgent_data}) su un socket, il segnale inviato alla scadenza
+di un POSIX timer (vedi sez.~\ref{sec:sig_timer_adv}) avvalora i campi
+\var{si\_timerid} e \var{si\_overrun}.
+
+Benché sia possibile usare nello stesso programma sia \func{sigaction} che