Iniiziate le funzioni per lo scheduling real-time
[gapil.git] / signal.tex
index 98e476eb52ef57e99ef2390f23b4b12bfd916482..11c97f7af7c947e38e18d8faec3437bf2d59cebf 100644 (file)
@@ -883,11 +883,11 @@ con il precedente prototipo si pu
 \begin{verbatim}
     typedef void (* sighandler_t)(int) 
 \end{verbatim}
 \begin{verbatim}
     typedef void (* sighandler_t)(int) 
 \end{verbatim}
-e cioè un puntatore ad una funzione \type{void} (cioè senza valore di ritorno)
-e che prende un argomento di tipo \type{int}.\footnote{si devono usare le
+e cioè un puntatore ad una funzione \ctyp{void} (cioè senza valore di ritorno)
+e che prende un argomento di tipo \ctyp{int}.\footnote{si devono usare le
   parentesi intorno al nome della funzione per via delle precedenze degli
   operatori del C, senza di esse si sarebbe definita una funzione che ritorna
   parentesi intorno al nome della funzione per via delle precedenze degli
   operatori del C, senza di esse si sarebbe definita una funzione che ritorna
-  un puntatore a \type{void} e non un puntatore ad una funzione \type{void}.}
+  un puntatore a \ctyp{void} e non un puntatore ad una funzione \ctyp{void}.}
 La funzione \func{signal} quindi restituisce e prende come secondo argomento
 un puntatore a una funzione di questo tipo, che è appunto il manipolatore del
 segnale.
 La funzione \func{signal} quindi restituisce e prende come secondo argomento
 un puntatore a una funzione di questo tipo, che è appunto il manipolatore del
 segnale.
@@ -957,6 +957,9 @@ la funzione \func{kill}; il cui prototipo 
   \headdecl{signal.h}
   \funcdecl{int kill(pid\_t pid, int sig)} Invia il segnale \param{sig} al
   processo specificato con \param{pid}.
   \headdecl{signal.h}
   \funcdecl{int kill(pid\_t pid, int sig)} Invia il segnale \param{sig} al
   processo specificato con \param{pid}.
+
+  La funzione restituisce 0 in caso di successo e -1 in caso di errore nel
+  qual caso \func{}
 \end{functions}
 
 Lo standard POSIX prevede che il valore 0 per \param{sig} sia usato per
 \end{functions}
 
 Lo standard POSIX prevede che il valore 0 per \param{sig} sia usato per
@@ -1617,15 +1620,61 @@ motivo che occorrono funzioni pi
 permettano di gestire i segnali in maniera più completa.
 
 
 permettano di gestire i segnali in maniera più completa.
 
 
+\subsection{I \textit{signal set}}
+\label{sec:sig_sigset}
+
+Come evidenziato nel paragrafo precedente, le funzioni di gestione dei segnali
+dei primi Unix, nate con la semantica inaffidabile, hanno dei limiti non
+superabili; in particolare non è prevista nessuna funzione che permetta di
+gestire correttamente i segnali pendenti e bloccati. 
+
+Per questo motivo lo standard POSIX, insieme alla nuova semantica dei segnali
+ha introdotto una interfaccia di gestione completamente nuova, che permette un
+controllo molto più dettagliato. In particolare lo standard ha introdotto un
+nuovo tipo di dato \type{sigset\_t}, che permette di rappresentare un insieme
+di segnali (un \textit{signal set} appunto), in modo da poterlo opportunamente
+manipolare.
+
+In genere il \textit{signal set} è rappresentato da un intero di dimensione
+opportuna (di solito pari al numero di bit dell'architettura della macchina,
+cosa che nel caso dei PC comporta un massimo di 32 segnali distinti), ciascun
+bit del quale è associato ad uno specifico segnale; lo standard POSIX
+definisce cinque funzioni per la manipolazione dei \textit{signal set},
+\func{sigemptyset}, \func{sigfillset}, \func{sigaddset}, \func{sigdelset} e
+\func{sigismember}; i relativi prototipi sono:
+\begin{functions}
+  \headdecl{signal.h} 
+
+  \funcdecl{int sigemptyset(sigset\_t *set)} Inizializza un \textit{signal set}
+  vuoto.
+  \funcdecl{int sigfillset(sigset\_t *set)} Inizializza un \textit{signal set}
+  pieno (con tutti i segnali).
+  
+  \funcdecl{int sigaddset(sigset\_t *set, int signum)} Aggiunge il segnale
+  \param{signum} al  \textit{signal set} \param{set}.
+
+  \funcdecl{int sigdelset(sigset\_t *set, int signum)} Toglie il segnale
+  \param{signum} dal \textit{signal set} \param{set}.
+  
+  \funcdecl{int sigismember(const sigset\_t *set, int signum)} Controlla se il
+  segnale \param{signum} è nel \textit{signal set} \param{set}
+  
+  \bodydesc{Le funzioni prime quattro funzioni ritornano 0, \func{sigismember}
+    ritorna 1 se \param{signum} è in \param{set} e 0 altrimenti, in caso di
+    errore, dovuto al fatto che \param{signum} non è un segnale valido, tutte
+    ritornano -1, con \var{errno} settata a \macro{EINVAL}.}
+\end{functions}
+
+
+
 
 \subsection{La funzione \func{sigaction}}
 \label{sec:sig_sigaction}
 
 
 \subsection{La funzione \func{sigaction}}
 \label{sec:sig_sigaction}
 
-Come evidenziato nel paragrafo precedente, le funzioni di gestione dei segnali
-dei primi Unix, hanno dei limiti non superabili; per questo motivo lo standard
-POSIX ha introdotto una interfaccia di gestione completamente nuova, che
-permette un controllo molto più dettagliato. La funzione principale di questa
-nuova interfaccia è \func{sigaction}; il cui prototipo è:
+
+La funzione principale di questa nuova interfaccia è \func{sigaction}; il cui
+prototipo è:
 
 \begin{prototype}{signal.h}{int sigaction(int signum, const struct sigaction
     *act, struct sigaction *oldact)} 
 
 \begin{prototype}{signal.h}{int sigaction(int signum, const struct sigaction
     *act, struct sigaction *oldact)} 
@@ -1683,9 +1732,6 @@ struct sigaction {
 \end{figure}
 
 
 \end{figure}
 
 
-\subsection{I \textit{signal set}}
-\label{sec:sig_sigset}
-
 
 \subsection{Le funzioni \func{sigpending} e \func{sigsuspend}}
 \label{sec:sig_sigpending}
 
 \subsection{Le funzioni \func{sigpending} e \func{sigsuspend}}
 \label{sec:sig_sigpending}