From: Simone Piccardi Date: Sat, 6 Apr 2002 22:11:49 +0000 (+0000) Subject: Si va avanti molto piano X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=commitdiff_plain;h=b8cd0e2a11c5e2766b26fb3df5e6bf32f91ec30e Si va avanti molto piano --- diff --git a/signal.tex b/signal.tex index ce3611d..5845440 100644 --- a/signal.tex +++ b/signal.tex @@ -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}