X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=signal.tex;h=f0565a23a2e305ccbfbe3fa04130cad36872efa8;hp=adbec4db3e49f90de92da980d3a064b2cf2716b1;hb=f841512e0852f0162daeeacc3050d426158a14ee;hpb=105bd8930572cf5885b4482966754d9af0597874 diff --git a/signal.tex b/signal.tex index adbec4d..f0565a2 100644 --- a/signal.tex +++ b/signal.tex @@ -1839,11 +1839,10 @@ dell'implementazione di \code{sleep} mostrata in allarme avesse interrotto un altro manipolatore questo non sarebbe stato eseguito correttamente; la cosa poteva essere prevenuta installando gli altri manipolatori usando \var{sa\_mask} per bloccare \macro{SIGALRM} durante la -loro esecuzione. -Il valore di \var{sa\_flag} permette di specificare vari aspetti del -comportamento di \func{sigaction}, e della reazione del processo ai vari -segnali; i valori possibili ed il relativo significato sono riportati in -\tabref{tab:sig_sa_flag}. +loro esecuzione. Il valore di \var{sa\_flag} permette di specificare vari +aspetti del comportamento di \func{sigaction}, e della reazione del processo +ai vari segnali; i valori possibili ed il relativo significato sono riportati +in \tabref{tab:sig_sa_flag}. \begin{table}[htb] \footnotesize @@ -1900,9 +1899,11 @@ che non si sia vincolati allo standard ISO C, l'uso di \func{signal} a favore di \func{sigaction}. Per questo motivo si è provveduto, per mantenere un'interfaccia semplificata -che abbia le stesse caratteristiche di \func{signal} a definire una funzione -equivalente (che si trova come \code{inline} nel file \file{wrapper.h} dei -sorgenti allegati) \code{Signal}, riportata in \figref{fig:sig_Signal_code}. +che abbia le stesse caratteristiche di \func{signal}, a definire una funzione +equivalente attraverso \func{sigaction}; la funzione è \code{Signal}, e si +trova definita come \code{inline} nel file \file{wrapper.h} (nei sorgenti +allegati), riportata in \figref{fig:sig_Signal_code}. La riutilizzeremo spesso +in seguito. \begin{figure}[!htb] \footnotesize \centering @@ -2263,11 +2264,11 @@ modificarlo con \func{sigprocmask}. Resta quindi il problema di cosa succede alla maschera dei segnali quando si esce da un manipolatore usando questa funzione. Il comportamento dipende dall'implementazione; in particolare BSD ripristina la maschera dei segnali -precedente l'invocazione, come per un normale ritorno, mentre SYSV no. Lo +precedente l'invocazione, come per un normale ritorno, mentre System V no. Lo standard POSIX.1 non specifica questo comportamento per \func{setjmp} e \func{longjmp}, ed il comportamento delle \acr{glibc} dipende da quale delle caratteristiche si sono abilitate con le macro viste in -\secref{sec:intro_gcc_glibc_std}. +\secref{sec:intro_gcc_glibc_std}. Lo standard POSIX però prevede anche la presenza di altre due funzioni \func{sigsetjmp} e \func{siglongjmp}, che permettono di decidere quale dei due @@ -2298,6 +2299,24 @@ ripristinata in un successivo \func{siglongjmp}; quest'ultima funzione, a parte l'uso di \type{sigjmp\_buf} per \param{env}, è assolutamente identica a \func{longjmp}. +\begin{prototype}{signal.h} +{int sigaltstack(const stack\_t *ss, stack\_t *oss)} + +Installa un nuovo stack per i segnali. + + \bodydesc{La funzione restituisce zero in caso di successo e -1 per un + errore, nel qual caso \var{errno} assumerà i valori: + + \begin{errlist} + \item[\macro{ENOMEM}] La dimensione specificata per il nuovo stack è minore + di \macro{MINSIGSTKSZ}. + \item[\macro{EPERM}] Uno degli indirizzi non è valido. + \item[\macro{EFAULT}] Si è cercato di cambiare lo stack alternativo mentre + questo è attivo (cioè il processo è in esecuzione su di esso). + \item[\macro{EINVAL}] \param{ss} non è nullo e \var{ss\_flags} contiene un + valore diverso da zero che non è \macro{SS\_DISABLE}. + \end{errlist}} +\end{prototype}