Proseguito con mount e statfs
[gapil.git] / signal.tex
index f67c571413ecd8d49d2b4108e72e3575cb33f8e8..d0f68b3a2dfdc9f9c9156047de4fd9f26fb31769 100644 (file)
@@ -12,6 +12,8 @@ anche essere usati come forma elementare di comunicazione fra processi (ad
 esempio vengono usati per il controllo di sessione), per notificare eventi
 (come la terminazione di un processo figlio), etc.
 
 esempio vengono usati per il controllo di sessione), per notificare eventi
 (come la terminazione di un processo figlio), etc.
 
+
+
 \section{I concetti base}
 \label{sec:sig_base}
 
 \section{I concetti base}
 \label{sec:sig_base}
 
@@ -122,7 +124,7 @@ riprende l'esecuzione all'istruzione successiva, ma essendo cambiato il flag
 la condizione non è più soddisfatta e il programma prosegue.
 
 Il problema con l'implementazione inaffidabile è che niente ci garantisce che
 la condizione non è più soddisfatta e il programma prosegue.
 
 Il problema con l'implementazione inaffidabile è che niente ci garantisce che
-il segnale arrivi fra la valutazione della condizione del \func{while} e la
+il segnale arrivi fra la valutazione della condizione del \code{while} e la
 chiamata a \func{pause}, nel qual caso, se il segnale non viene più generato,
 il processo resterà in sleep permanentemente.
 
 chiamata a \func{pause}, nel qual caso, se il segnale non viene più generato,
 il processo resterà in sleep permanentemente.
 
@@ -653,24 +655,39 @@ classificabili in maniera omogenea. Questi segnali sono:
 \subsection{Le funzioni \func{strsignal} e \func{psignal}}
 \label{sec:sig_strsignal}
 
 \subsection{Le funzioni \func{strsignal} e \func{psignal}}
 \label{sec:sig_strsignal}
 
-Per la descrizione dei segnali il sistema mette a disposizione due funzioni
-che stampano un messaggio di descrizione dato il numero. In genere si usano
-quando si vuole notificare all'utente il segnale avvenuto (nel caso di
-terminazione di un processo figlio o di un manipolatore che gestisce più
-segnali); la prima funzione è una estensione GNU ed è analoga alla funzione
-\func{strerr} per gli errori:
-\begin{prototype}{string.h}{char * strsignal (int signum)} 
-  Ritorna il puntatore ad una stringa allocata staticamente che contiene la
-  descrizione del segnale \var{signum}. 
+Per la descrizione dei segnali il sistema mette a disposizione due funzioni,
+\func{strsignal} e \func{psignal}, che stampano un messaggio di descrizione
+dato il numero. In genere si usano quando si vuole notificare all'utente il
+segnale avvenuto (nel caso di terminazione di un processo figlio o di un
+manipolatore che gestisce più segnali); la prima funzione è una estensione
+GNU, accessibile avendo definito \macro{\_GNU\_SOURCE}, ed è analoga alla
+funzione \func{strerror} (si veda \secref{sec:sys_strerror}) per gli errori:
+\begin{prototype}{string.h}{char *strsignal(int signum)} 
+  Ritorna il puntatore ad una stringa che contiene la descrizione del segnale
+  \var{signum}.
 \end{prototype}
 \end{prototype}
-
-Dato che la stringa è allocata staticamente non se ne deve modificare il
-contenuto, che resta valido solo fino alla successiva chiamata di
-\func{strsignal}; nel caso si debba mantenere traccia del messaggio sarà
+\noindent dato che la stringa è allocata staticamente non se ne deve
+modificare il contenuto, che resta valido solo fino alla successiva chiamata
+di \func{strsignal}. Nel caso si debba mantenere traccia del messaggio sarà
 necessario copiarlo.
 
 La seconda funzione deriva da BSD ed è analoga alla funzione \func{perror}
 necessario copiarlo.
 
 La seconda funzione deriva da BSD ed è analoga alla funzione \func{perror}
-descritta in \secref{sec:sys_strerror}.
+descritta in \secref{sec:sys_strerror}; il suo prototipo è:
+\begin{prototype}{signal.h}{void psignal(int sig, const char *s)} 
+  Stampa sullo standard error un messaggio costituito dalla stringa \param{s},
+  seguita da due punti ed una descrizione del segnale indicato da \param{sig}.
+\end{prototype}
+
+Una modalità alternativa per utilizzare le descrizioni restituite da
+\func{strsignal} e \func{psignal} è quello di fare usare la variabile
+\var{sys\_siglist}, che può essere acceduta dichiarando:
+\begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}
+    extern const char *const sys_siglist[]
+\end{lstlisting}
+\var{sys\_siglist} contiene le stringhe di descrizione indicizzate per numero
+di segnale, per cui \code{char *decr = strsignal(SIGINT)} può essere
+sostituito dall'equivalente \code{char *decr = sys\_siglist[SIGINT]}.
+
 
 
 \section{La gestione dei segnali}
 
 
 \section{La gestione dei segnali}
@@ -705,13 +722,13 @@ comportamento, pur mantenendone immutato il prototipo\footnote{in realt
   Installa una nuova funzione di gestione (manipolatore) per il segnale
   \param{signum}, usando il manipolatore \param{handler}.
   
   Installa una nuova funzione di gestione (manipolatore) per il segnale
   \param{signum}, usando il manipolatore \param{handler}.
   
-  La funzione ritorna il precedente manipolatore in caso di successo o
-  \macro{SIG\_ERR} in caso di errore.
+  \bodydesc{La funzione ritorna il precedente manipolatore in caso di successo
+    o \macro{SIG\_ERR} in caso di errore.}
 \end{prototype}
 
 In questa definizione si è usato il tipo \type{sighandler\_t} che è una
 estensione GNU definita in Linux che permette di riscrivere il prototipo in
 \end{prototype}
 
 In questa definizione si è usato il tipo \type{sighandler\_t} che è una
 estensione GNU definita in Linux che permette di riscrivere il prototipo in
-forma più leggibile dell'originario \func{void (*signal(int signum, void
+forma più leggibile dell'originario \code{void (*signal(int signum, void
   (*handler)(int)))int)}, e che è sostanzialmente equivalente alla
 definizione:
 \begin{verbatim}
   (*handler)(int)))int)}, e che è sostanzialmente equivalente alla
 definizione:
 \begin{verbatim}
@@ -743,3 +760,8 @@ intercettati).
 \subsection{La funzione \func{sigpending}}
 \label{sec:sig_sigpending}
 
 \subsection{La funzione \func{sigpending}}
 \label{sec:sig_sigpending}
 
+
+%%% Local Variables: 
+%%% mode: latex
+%%% TeX-master: "gapil"
+%%% End: