Si va avanti molto piano
authorSimone Piccardi <piccardi@gnulinux.it>
Sat, 6 Apr 2002 22:11:49 +0000 (22:11 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Sat, 6 Apr 2002 22:11:49 +0000 (22:11 +0000)
signal.tex

index ce3611deefe598019aa6de22b3cb3b71ca1fe1ad..58454408615332f9a7bc5d78e41a8c6de8f8e3f1 100644 (file)
@@ -1540,7 +1540,8 @@ unsigned int sleep(unsigned int seconds)
     /* remove alarm, return remaining time */
     return alarm(0);
 }
-void alarm_hand(int sig) {
+void alarm_hand(int sig) 
+{
     /* check if the signal is the right one */
     if (sig != SIGALRM) { /* if not exit with error */
         printf("Something wrong, handler for SIGALRM\n");
@@ -1593,7 +1594,8 @@ unsigned int sleep(unsigned int seconds)
     /* remove alarm, return remaining time */
     return alarm(0);
 }
-void alarm_hand(int sig) {
+void alarm_hand(int sig) 
+{
     /* check if the signal is the right one */
     if (sig != SIGALRM) { /* if not exit with error */
         printf("Something wrong, handler for SIGALRM\n");
@@ -1646,7 +1648,7 @@ In genere un \textit{signal set} 
 opportuna, di solito si pari al numero di bit dell'architettura della
 macchina\footnote{nel caso dei PC questo comporta un massimo di 32 segnali
   distinti, dato che in Linux questi sono sufficienti non c'è necessità di
-  nessuna struttura più complicata}, ciascun bit del quale è associato ad uno
+  nessuna struttura più complicata.}, ciascun bit del quale è associato ad uno
 specifico segnale; in questo modo è di solito possibile implementare le
 operazioni direttamente con istruzioni elementari del processore; lo standard
 POSIX definisce cinque funzioni per la manipolazione dei \textit{signal set},
@@ -1695,8 +1697,10 @@ la presenza di uno specifico segnale in un \textit{signal set}.
 \subsection{La funzione \func{sigaction}}
 \label{sec:sig_sigaction}
 
-La funzione principale di questa nuova interfaccia è \func{sigaction}; il cui
-prototipo è:
+La funzione principale dell'interfaccia standard POSIX per i segnali è
+\func{sigaction}, essa ha sostanzialemente le stesse funzioni di
+\func{signal}, permette cioè di specificare come un segnale può essere gestito
+da un processo. Il suo prototipo è:
 
 \begin{prototype}{signal.h}{int sigaction(int signum, const struct sigaction
     *act, struct sigaction *oldact)} 
@@ -1719,19 +1723,19 @@ La funzione serve ad installare una nuova azione per il segnale
 caratteristiche della risposta al segnale, non solo la funzione del
 manipolatore.  Lo standard POSIX raccomanda di usare sempre questa funzione al
 posto di \func{signal} (che in genere viene definita tramite essa), in quanto
-offre un controllo completo, sia pure al prezzo di una maggiore complessità
-d'uso.
+offre un controllo completo su tutti gli aspetti della gestione di un segnale,
+sia pure al prezzo di una maggiore complessità d'uso.
 
-Se il puntatore \param{act} non è nullo la funzione installa la nuova azione
+Se il puntatore \param{act} non è nullo, la funzione installa la nuova azione
 da esso specificata, se \param{oldact} non è nullo il valore dell'azione
 corrente viene restituito indietro.  Questo permette (specificando \param{act}
 nullo e \param{oldact} non nullo) di superare uno dei limiti di \func{signal},
 che non consente di ottenere l'azione corrente senza installarne una nuova.
 
-Entrambi i puntatori fanno riferimento alla struttura \var{sigaction}, che
-permette di descrivere tutte le caratteristiche dell'azione associata ad un
+Entrambi i puntatori fanno riferimento alla struttura \var{sigaction}, tramite
+la quale si specificano tutte le caratteristiche dell'azione associata ad un
 segnale.  Anch'essa è descritta dallo standard POSIX ed in Linux è definita
-secondo quanto riportato in \secref{fig:sig_sigaction}, il campo
+secondo quanto riportato in \figref{fig:sig_sigaction}. Il campo
 \var{sa\_restorer}, non previsto dallo standard, è obsoleto e non deve essere
 più usato.
 
@@ -1753,6 +1757,17 @@ struct sigaction {
   \label{fig:sig_sigaction}
 \end{figure}
 
+Come riportato in \figref{fig:sig_sigaction} in Linux \func{sigaction} permette
+di specificare il manipolatore in due forme diverse, indicate dai campi
+\var{sa\_handler} e \var{sa\_sigaction}; esse devono essere usate in maniera
+alternativa (in certe implementazioni questi vengono specificati come
+\ctyp{union}); la prima è quella classica usata anche con \func{signal}, la
+seconda permette invece di usare un manipolatore in grado di ricevere
+informazioni più dettagliate dal sistema (ad esempio il tipo di errore in caso
+di \macro{SIGFPE}).
+
+
+
 
 
 \subsection{La gestione del blocco dei segnali}