il controllo dei contenuti, in particolar modo quelli posti su dispositivi
rimuovibili. In questo modo si evitano alla radice possibili situazioni in
cui un utente malizioso inserisce su uno di questi filesystem dei file di
- dispositivo con permessi ``opportunamente'' ampliati che gli consentano di
- accedere anche a risorse cui non dovrebbe.
+ dispositivo con permessi ``opportunamente'' ampliati che gli consentirebbero
+ di accedere anche a risorse cui non dovrebbe.
\item[\const{MS\_NODIRATIME}] Viene disabilitato sul filesystem
l'aggiornamento degli \textit{access time} (vedi
{La funzione ritorna $0$ in caso di successo e $-1$ per un errore,
nel qual caso \var{errno} assumerà uno dei valori:
\begin{errlist}
+ \item[\errcode{EAGAIN}] si è chiamata la funzione con \const{MNT\_EXPIRE}
+ ed il filesystem non era occupato.
\item[\errcode{EBUSY}] \param{target} è la \index{directory~di~lavoro}
directory di lavoro di qualche processo, o contiene dei file aperti, o un
altro mount point.
- \item[\errcode{EAGAIN}] si è chiamata la funzione con \const{MNT\_EXPIRE}
- ed il filesystem non era occupato.
\item[\errcode{EINVAL}] \param{target} non è un \itindex{mount~point}
\textit{mount point} o si è usato \const{MNT\_EXPIRE} con
\const{MNT\_FORCE} o \const{MNT\_DETACH} o si è specificato un flag non
parte di qualche processo (come \index{directory~di~lavoro} directory di
lavoro o come radice) o del sistema (come \itindex{mount~point}
\textit{mount point}) ed il sistema non riesce a risolvere la situazione.
+ \item[\errcode{EEXIST}] \param{newpath} è una directory già esistente e
+ non è vuota (anche \errcode{ENOTEMPTY}).
\item[\errcode{EINVAL}] \param{newpath} contiene un prefisso di
\param{oldpath} o più in generale si è cercato di creare una directory come
sotto-directory di sé stessa.
\item[\errcode{EISDIR}] \param{newpath} è una directory mentre
\param{oldpath} non è una directory.
- \item[\errcode{EEXIST}] \param{newpath} è una directory già esistente e
- non è vuota (anche \errcode{ENOTEMPTY}).
\item[\errcode{ENOTDIR}] uno dei componenti dei \textit{pathname} non è una
directory o \param{oldpath} è una directory e
\param{newpath} esiste e non è una directory.
che contiene la directory che si vuole cancellare, o non c'è il permesso
di attraversare (esecuzione) una delle directory specificate in
\param{dirname}.
- \item[\errcode{EINVAL}] si è usato ``\texttt{.}'' come ultimo componente
- di \param{dirname}.
\item[\errcode{EBUSY}] la directory specificata è la
\index{directory~di~lavoro} directory di lavoro o la radice di qualche
processo o un \itindex{mount~point} \textit{mount point}.
+ \item[\errcode{EINVAL}] si è usato ``\texttt{.}'' come ultimo componente
+ di \param{dirname}.
\item[\errcode{EPERM}] il filesystem non supporta la cancellazione di
directory, oppure la directory che contiene \param{dirname} ha lo
\itindex{sticky~bit} \textit{sticky bit} impostato e non si è i
di \param{pathname}.
\item[\errcode{ENOTDIR}] non si è specificata una directory.
\end{errlist}
- ed inoltre \errval{EFAULT}, \errval{ELOOP}, \errval{EIO},
+ ed inoltre \errval{EFAULT}, \errval{EIO}, \errval{ELOOP},
\errval{ENAMETOOLONG}, \errval{ENOENT} e \errval{ENOMEM} nel loro
significato generico.}
\end{funcproto}
errore, nel qual
caso \var{errno} assumerà uno dei valori:
\begin{errlist}
- \item[\errcode{EINVAL}] \param{template} non termina con \code{XXXXXX}.
\item[\errcode{EEXIST}] non è riuscita a creare un file temporaneo, il
contenuto di \param{template} è indefinito.
+ \item[\errcode{EINVAL}] \param{template} non termina con \code{XXXXXX}.
\end{errlist}}
\end{funcproto}
{Le funzioni ritornano un oggetto di tipo \type{acl\_t} in caso di successo e
\val{NULL} per un errore, nel qual caso \var{errno} assumerà uno dei valori:
\begin{errlist}
- \item[\errcode{ACCESS}] non c'è accesso per una componente di
+ \item[\errcode{EACCESS}] non c'è accesso per una componente di
\param{path\_p} o si è richiesta una ACL di default per un file (solo per
\func{acl\_get\_file}).
\item[\errcode{EINVAL}] \param{type} non ha un valore valido (solo per
\val{NULL} per un errore, nel qual caso \var{errno} assumerà uno
dei valori:
\begin{errlist}
- \item[\errcode{ENOMEM}] non c'è memoria sufficiente per allocare i dati.
\item[\errcode{EINVAL}] la rappresentazione testuale all'indirizzo
\param{buf\_p} non è valida.
+ \item[\errcode{ENOMEM}] non c'è memoria sufficiente per allocare i dati.
\end{errlist}
}
\end{funcproto}
testuale della ACL in caso di successo e \var{NULL} per un errore, nel qual
caso \var{errno} assumerà uno dei valori:
\begin{errlist}
- \item[\errcode{ENOMEM}] non c'è memoria sufficiente per allocare i dati.
\item[\errcode{EINVAL}] la ACL indicata da \param{acl} non è valida.
+ \item[\errcode{ENOMEM}] non c'è memoria sufficiente per allocare i dati.
\end{errlist}
}
\end{funcproto}
testuale della ACL in caso di successo e \val{NULL} per un errore, nel qual
caso \var{errno} assumerà uno dei valori:
\begin{errlist}
- \item[\errcode{ENOMEM}] non c'è memoria sufficiente per allocare i dati.
\item[\errcode{EINVAL}] la ACL indicata da \param{acl} non è valida.
- \end{errlist}
+ \item[\errcode{ENOMEM}] non c'è memoria sufficiente per allocare i dati.
+ \end{errlist}
}
\end{funcproto}
caso \var{errno} assumerà uno dei valori:
\begin{errlist}
\item[\errcode{EINVAL}] il segnale specificato non esiste.
- \item[\errcode{ESRCH}] il processo o il gruppo di processi indicato non
- esiste.
\item[\errcode{EPERM}] non si hanno privilegi sufficienti ad inviare il
segnale.
+ \item[\errcode{ESRCH}] il processo o il gruppo di processi indicato non
+ esiste.
\end{errlist}
}
\end{funcproto}
{La funzione ritorna $0$ se l'attesa viene completata e $-1$ per un errore,
nel qual caso \var{errno} assumerà uno dei valori:
\begin{errlist}
+ \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale.
\item[\errcode{EINVAL}] si è specificato un numero di secondi negativo o un
numero di nanosecondi maggiore di 999.999.999.
- \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale.
\end{errlist}
}
\end{funcproto}
{La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
caso \var{errno} assumerà uno dei valori:
\begin{errlist}
+ \item[\errcode{EFAULT}] si sono specificati indirizzi non validi.
\item[\errcode{EINVAL}] si è specificato un numero di segnale invalido o si è
cercato di installare il gestore per \signal{SIGKILL} o
\signal{SIGSTOP}.
- \item[\errcode{EFAULT}] si sono specificati indirizzi non validi.
\end{errlist}
}
\end{funcproto}
{La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
caso \var{errno} assumerà uno dei valori:
\begin{errlist}
- \item[\errcode{EINVAL}] si è specificato un numero di segnale invalido.
\item[\errcode{EFAULT}] si sono specificati indirizzi non validi.
+ \item[\errcode{EINVAL}] si è specificato un numero di segnale invalido.
\end{errlist}
}
\end{funcproto}
{La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
caso \var{errno} assumerà uno dei valori:
\begin{errlist}
- \item[\errcode{EINVAL}] si è specificato un numero di segnale invalido.
\item[\errcode{EFAULT}] si sono specificati indirizzi non validi.
+ \item[\errcode{EINVAL}] si è specificato un numero di segnale invalido.
\end{errlist}
}
\end{funcproto}
Inoltre, per poter usufruire della capacità di restituire dei dati, i relativi
gestori devono essere installati con \func{sigaction}, specificando per
\var{sa\_flags} la modalità \const{SA\_SIGINFO} che permette di utilizzare la
-forma estesa \var{sa\_sigaction} (vedi sez.~\ref{sec:sig_sigaction}) del
-gestore. In questo modo tutti i segnali \textit{real-time} possono restituire
-al gestore una serie di informazioni aggiuntive attraverso l'argomento
-\struct{siginfo\_t}, la cui definizione è stata già vista in
-fig.~\ref{fig:sig_siginfo_t}, nella trattazione dei gestori in forma estesa.
+forma estesa \var{sa\_sigaction} del gestore (vedi
+sez.~\ref{sec:sig_sigaction}). In questo modo tutti i segnali
+\textit{real-time} possono restituire al gestore una serie di informazioni
+aggiuntive attraverso l'argomento \struct{siginfo\_t}, la cui definizione è
+stata già vista in fig.~\ref{fig:sig_siginfo_t}, nella trattazione dei gestori
+in forma estesa.
In particolare i campi utilizzati dai segnali \textit{real-time} sono
\var{si\_pid} e \var{si\_uid} in cui vengono memorizzati rispettivamente il
Secondo lo standard POSIX la profondità della coda è indicata dalla costante
\const{SIGQUEUE\_MAX}, una della tante costanti di sistema definite dallo
standard POSIX che non abbiamo riportato esplicitamente in
-sez.~\ref{sec:sys_limits}, il suo valore minimo secondo lo standard,
+sez.~\ref{sec:sys_limits}. Il suo valore minimo secondo lo standard,
\const{\_POSIX\_SIGQUEUE\_MAX}, è pari a 32. Nel caso di Linux la coda ha una
dimensione variabile; fino alla versione 2.6.7 c'era un limite massimo globale
che poteva essere impostato come parametro del kernel in
-\sysctlfile{kernel/rtsig-max};\footnote{ed il valore predefinito era pari a
- 1024.} a partire dal kernel 2.6.8 il valore globale è stato rimosso e
-sostituito dalla risorsa \const{RLIMIT\_SIGPENDING} associata al singolo
-utente, che può essere modificata con \func{setrlimit} come illustrato in
+\sysctlfile{kernel/rtsig-max} ed il valore predefinito era pari a 1024. A
+partire dal kernel 2.6.8 il valore globale è stato rimosso e sostituito dalla
+risorsa \const{RLIMIT\_SIGPENDING} associata al singolo utente, che può essere
+modificata con \func{setrlimit} come illustrato in
sez.~\ref{sec:sys_resource_limit}.
-Lo standard POSIX.1b definisce inoltre delle nuove funzioni che permettono di
-gestire l'attesa di segnali specifici su una coda, esse servono in particolar
-modo nel caso dei \itindex{thread} \textit{thread}, in cui si possono usare i
-segnali \textit{real-time} come meccanismi di comunicazione elementare; la
-prima di queste funzioni è \funcd{sigwait}, il cui prototipo è:
-\begin{prototype}{signal.h}
- {int sigwait(const sigset\_t *set, int *sig)}
-
- Attende che uno dei segnali specificati in \param{set} sia pendente.
-
- \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
- errore, nel qual caso \var{errno} assumerà uno dei valori:
+Lo standard POSIX.1b definisce inoltre delle nuove funzioni di sistema che
+permettono di gestire l'attesa di segnali specifici su una coda, esse servono
+in particolar modo nel caso dei \itindex{thread} \textit{thread}, in cui si
+possono usare i segnali \textit{real-time} come meccanismi di comunicazione
+elementare; la prima di queste è \funcd{sigwait}, il cui prototipo è:
+
+\begin{funcproto}{
+\fhead{signal.h}
+\fdecl{int sigwait(const sigset\_t *set, int *sig)}
+\fdesc{Attende la ricezione di un segnale.}
+}
+{La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
+ caso \var{errno} assumerà uno dei valori:
\begin{errlist}
\item[\errcode{EINTR}] la funzione è stata interrotta.
\item[\errcode{EINVAL}] si è specificato un valore non valido per
- \param{set}.
\end{errlist}
- ed inoltre \errval{EFAULT}.}
-\end{prototype}
+ ed inoltre \errval{EFAULT} nel suo significato generico.}
+\end{funcproto}
-La funzione estrae dall'insieme dei segnali pendenti uno qualunque dei segnali
-specificati da \param{set}, il cui valore viene restituito in \param{sig}. Se
-sono pendenti più segnali, viene estratto quello a priorità più alta (cioè con
-il numero più basso). Se, nel caso di segnali \textit{real-time}, c'è più di
-un segnale pendente, ne verrà estratto solo uno. Una volta estratto il segnale
-non verrà più consegnato, e se era in una coda il suo posto sarà liberato. Se
-non c'è nessun segnale pendente il processo viene bloccato fintanto che non ne
-arriva uno.
+La funzione estrae dall'insieme dei segnali pendenti uno qualunque fra quelli
+indicati nel \textit{signal set} specificato in \param{set}, il cui valore
+viene restituito nella variabile puntata da \param{sig}. Se sono pendenti più
+segnali, viene estratto quello a priorità più alta, cioè quello con il numero
+più basso. Se, nel caso di segnali \textit{real-time}, c'è più di un segnale
+pendente, ne verrà estratto solo uno. Una volta estratto il segnale non verrà
+più consegnato, e se era in una coda il suo posto sarà liberato. Se non c'è
+nessun segnale pendente il processo viene bloccato fintanto che non ne arriva
+uno.
Per un funzionamento corretto la funzione richiede che alla sua chiamata i
segnali di \param{set} siano bloccati. In caso contrario si avrebbe un
consegnato che essere ricevuto da \func{sigwait}, il tutto in maniera non
prevedibile.
-Lo standard POSIX.1b definisce altre due funzioni, anch'esse usate
+Lo standard POSIX.1b definisce altre due funzioni di sistema, anch'esse usate
prevalentemente con i \itindex{thread} \textit{thread}; \funcd{sigwaitinfo} e
\funcd{sigtimedwait}, i relativi prototipi sono:
-\begin{functions}
- \headdecl{signal.h}
- \funcdecl{int sigwaitinfo(const sigset\_t *set, siginfo\_t *info)}
-
- Analoga a \func{sigwait}, ma riceve anche le informazioni associate al
- segnale in \param{info}.
-
- \funcdecl{int sigtimedwait(const sigset\_t *set, siginfo\_t *info, const
- struct timespec *timeout)}
-
- Analoga a \func{sigwaitinfo}, con un la possibilità di specificare un
- timeout in \param{timeout}.
+\begin{funcproto}{
+\fhead{signal.h}
+\fdecl{int sigwaitinfo(const sigset\_t *set, siginfo\_t *info)}
+\fdesc{Attende un segnale con le relative informazioni.}
+\fdecl{int sigtimedwait(const sigset\_t *set, siginfo\_t *info, const
+ struct timespec *timeout)}
+\fdesc{Attende un segnale con le relative informazioni per un tempo massimo.}
+}
-
- \bodydesc{Le funzioni restituiscono 0 in caso di successo e $-1$ in caso di
- errore, nel qual caso \var{errno} assumerà uno dei valori già visti per
- \func{sigwait}, ai quali si aggiunge, per \func{sigtimedwait}:
+{Le funzioni ritornano $0$ in caso di successo e $-1$ per un errore, nel qual
+ caso \var{errno} assumerà uno gli stessi valori di \func{sigwait} ai quali
+ si aggiunge per \func{sigtimedwait}:
\begin{errlist}
\item[\errcode{EAGAIN}] si è superato il timeout senza che un segnale atteso
- fosse emesso.
+ sia stato ricevuto.
\end{errlist}
}
-\end{functions}
+\end{funcproto}
+
Entrambe le funzioni sono estensioni di \func{sigwait}. La prima permette di
ricevere, oltre al numero del segnale, anche le informazioni ad esso associate
-tramite \param{info}; in particolare viene restituito il numero del segnale
-nel campo \var{si\_signo}, la sua causa in \var{si\_code}, e se il segnale è
-stato immesso sulla coda con \func{sigqueue}, il valore di ritorno ad esso
-associato viene riportato in \var{si\_value}, che altrimenti è indefinito.
-
-La seconda è identica alla prima ma in più permette di specificare un timeout,
-scaduto il quale ritornerà con un errore. Se si specifica un puntatore nullo
-il comportamento sarà identico a \func{sigwaitinfo}, se si specifica un tempo
-di timeout nullo, e non ci sono segnali pendenti la funzione ritornerà
-immediatamente; in questo modo si può eliminare un segnale dalla coda senza
-dover essere bloccati qualora esso non sia presente.
+tramite l'argomento \param{info}; in particolare viene restituito il numero
+del segnale nel campo \var{si\_signo}, la sua causa in \var{si\_code}, e se il
+segnale è stato immesso sulla coda con \func{sigqueue}, il valore di ritorno
+ad esso associato viene riportato in \var{si\_value}, che altrimenti è
+indefinito.
+
+La seconda è identica alla prima ma in più permette di specificare un timeout
+con l'argomento omonimo, scaduto il quale ritornerà con un errore. Se si
+specifica per \param{timeoout} un puntatore nullo il comportamento sarà
+identico a \func{sigwaitinfo}. Se si specifica un tempo di timeout nullo e non
+ci sono segnali pendenti la funzione ritornerà immediatamente, in questo modo
+si può eliminare un segnale dalla coda senza dover essere bloccati qualora
+esso non sia presente.
\itindbeg{thread}
sez.~\ref{sec:sys_cpu_times} che quelle per la gestione dei timer di
sez.~\ref{sec:sig_alarm_abort} sono state a lungo limitate dalla risoluzione
massima dei tempi dell'orologio interno del kernel, che era quella ottenibile
-dal timer di sistema che governa lo \textit{scheduler},\footnote{e quindi
- limitate dalla frequenza dello stesso che si ricordi, come già illustrato in
- sez.~\ref{sec:proc_hierarchy}, è data dal valore della costante
- \texttt{HZ}.} i contatori usati per il calcolo dei tempi infatti erano
-basati sul numero di \itindex{jiffies} \textit{jiffies} che vengono
-incrementati ad ogni \textit{clock tick} del timer di sistema.\footnote{il che
- comportava anche, come accennato in sez.~\ref{sec:sig_alarm_abort} per
- \func{setitimer}, problemi per il massimo periodo di tempo copribile da
- alcuni di questi orologi, come quelli associati al \textit{process time}
- almeno fino a quando, con il kernel 2.6.16, non è stato rimosso il limite di
- un valore a 32 bit per i \textit{jiffies}.}
+dal timer di sistema che governa lo \textit{scheduler}, e quindi limitate
+dalla frequenza dello stesso che si ricordi, come già illustrato in
+sez.~\ref{sec:proc_hierarchy}, è data dal valore della costante \texttt{HZ}. I
+contatori usati per il calcolo dei tempi infatti erano basati sul numero di
+\itindex{jiffies} \textit{jiffies} che vengono incrementati ad ogni
+\textit{clock tick} del timer di sistema, il che comportava anche, come
+accennato in sez.~\ref{sec:sig_alarm_abort} per \func{setitimer}, problemi per
+il massimo periodo di tempo copribile da alcuni di questi orologi, come quelli
+associati al \textit{process time} almeno fino a quando, con il kernel 2.6.16,
+non è stato rimosso il limite di un valore a 32 bit per i \textit{jiffies}.
Nelle architetture moderne però tutti i computer sono dotati di temporizzatori
hardware che possono supportare risoluzioni molto elevate, ed in maniera del
tutto indipendente dalla frequenza scelta per il timer di sistema che governa
-lo \textit{scheduler};\footnote{normalmente si possono ottenere precisioni
- fino al microsecondo, andando molto oltre in caso di hardware dedicato.} per
-questo lo standard POSIX.1-2001 ha previsto una serie di nuove funzioni
-relative a quelli che vengono chiamati ``\textsl{orologi}
-\textit{real-time}'', in grado di supportare risoluzioni fino al
-nanosecondo. Inoltre le CPU più moderne sono dotate a loro volta di contatori
-ad alta definizione che consentono una grande accuratezza nella misura del
-tempo da esse dedicato all'esecuzione di un processo.
+lo \textit{scheduler}, normalmente si possono ottenere precisioni fino al
+microsecondo, andando molto oltre in caso di hardware dedicato. Per questo lo
+standard POSIX.1-2001 ha previsto una serie di nuove funzioni relative a
+quelli che vengono chiamati ``\textsl{orologi} \textit{real-time}'', in grado
+di supportare risoluzioni fino al nanosecondo. Inoltre le CPU più moderne sono
+dotate a loro volta di contatori ad alta definizione che consentono una grande
+accuratezza nella misura del tempo da esse dedicato all'esecuzione di un
+processo.
Per usare queste funzionalità ed ottenere risoluzioni temporali più accurate,
occorre però un opportuno supporto da parte del kernel, ed i cosiddetti
% funzionamento, vedi http://lwn.net/Articles/429595/
% TODO: dal 2.6.39 anche CLOCK_BOOTTIME_ALARM e CLOCK_BOOTTIME, vedi
% http://lwn.net/Articles/429925/
-% TODP: dal 3.0 anche i cosiddetti Posix Alarm Timers, con
+% TODO: dal 3.0 anche i cosiddetti Posix Alarm Timers, con
% CLOCK_REALTIME_ALARM vedi http://lwn.net/Articles/429925/
Per poter utilizzare queste funzionalità le \acr{glibc} richiedono che la
\bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
errore, nel qual caso \var{errno} assumerà uno dei seguenti valori:
\begin{errlist}
+ \item[\errcode{EFAULT}] l'indirizzo \param{tp} non è valido.
\item[\errcode{EINVAL}] il valore specificato per \param{clockid} non è
valido o il relativo orologio \textit{real-time} non è supportato dal
sistema.
\item[\errcode{EPERM}] non si ha il permesso di impostare l'orologio
indicato (solo per \func{clock\_settime}).
- \item[\errcode{EFAULT}] l'indirizzo \param{tp} non è valido.
\end{errlist}
}
\end{functions}
\bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
errore, nel qual caso \var{errno} assumerà uno dei seguenti valori:
\begin{errlist}
+ \item[\errcode{EFAULT}] l'indirizzo di \param{res} non è valido.
\item[\errcode{EINVAL}] il valore specificato per \param{clockid} non è
valido.
- \item[\errcode{EFAULT}] l'indirizzo di \param{res} non è valido.
\end{errlist}
}
\end{functions}
\bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
errore, nel qual caso \var{errno} assumerà uno dei seguenti valori:
\begin{errlist}
+ \item[\errcode{EFAULT}] si è specificato un indirizzo non valido
+ per \param{new\_value} o \param{old\_value}.
\item[\errcode{EINVAL}] all'interno di \param{new\_value.value} si è
specificato un tempo negativo o un numero di nanosecondi maggiore di
999999999.
- \item[\errcode{EFAULT}] si è specificato un indirizzo non valido
- per \param{new\_value} o \param{old\_value}.
\end{errlist}
}
\end{functions}
\bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
errore, nel qual caso \var{errno} assumerà uno dei seguenti valori:
\begin{errlist}
- \item[\errcode{EINVAL}] \param{timerid} non indica un timer valido.
\item[\errcode{EFAULT}] si è specificato un indirizzo non valido
per \param{curr\_value}.
+ \item[\errcode{EINVAL}] \param{timerid} non indica un timer valido.
\end{errlist}
}
\end{functions}
errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{ENOMEM}] la dimensione specificata per il nuovo
- \textit{stack} è minore di \const{MINSIGSTKSZ}.
- \item[\errcode{EPERM}] uno degli indirizzi non è valido.
\item[\errcode{EFAULT}] si è cercato di cambiare lo \textit{stack}
alternativo mentre questo è attivo (cioè il processo è in esecuzione su di
esso).
\item[\errcode{EINVAL}] \param{ss} non è nullo e \var{ss\_flags} contiene un
valore diverso da zero che non è \const{SS\_DISABLE}.
+ \item[\errcode{ENOMEM}] la dimensione specificata per il nuovo
+ \textit{stack} è minore di \const{MINSIGSTKSZ}.
+ \item[\errcode{EPERM}] uno degli indirizzi non è valido.
\end{errlist}}
\end{prototype}