Aggiunti un po' di prototipi di funzione
authorSimone Piccardi <piccardi@gnulinux.it>
Sat, 20 Jul 2002 15:58:15 +0000 (15:58 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Sat, 20 Jul 2002 15:58:15 +0000 (15:58 +0000)
fileadv.tex
signal.tex

index f805181d3a5c0768cd326b25dd987d63bd19cb5f..2f16a2759b42799018f3275428c967a6cee3ae0e 100644 (file)
@@ -366,7 +366,14 @@ una coda di consegna ogni segnale sar
 inoltre sarà possibile stabilire delle priorità nella risposta a seconda del
 segnale usato. In questo modo si può identificare immediatamente un file su
 cui l'accesso è diventato possibile evitando completamente l'uso di funzioni
 inoltre sarà possibile stabilire delle priorità nella risposta a seconda del
 segnale usato. In questo modo si può identificare immediatamente un file su
 cui l'accesso è diventato possibile evitando completamente l'uso di funzioni
-come \func{poll} e \func{select}.
+come \func{poll} e \func{select}, almeno fintanto che non si satura la coda;
+si eccedono le dimensioni di quest'ultima; in tal caso infatti il kernel, non
+potendo più assicurare il comportamento corretto per un segnale real-time,
+invierà al suo posto un \var{SIGIO}, su cui si accumuleranno tutti i segnali
+in eccesso, e si dovra determinare al solito modo quali sono i file diventati
+attivi.
+
+
 
 Benché la modalità di apertura asincrona di un file possa risultare utile in
 varie occasioni (in particolar modo con i socket e gli altri file per i quali
 
 Benché la modalità di apertura asincrona di un file possa risultare utile in
 varie occasioni (in particolar modo con i socket e gli altri file per i quali
index ea8454e2555c90322f0e83db3d7db492d783e634..0d645f6e78f6750d17458a46e5b1fdba76829430 100644 (file)
@@ -2,9 +2,9 @@
 \label{cha:signals}
 
 I segnali sono il primo e più semplice meccanismo di comunicazione nei
 \label{cha:signals}
 
 I segnali sono il primo e più semplice meccanismo di comunicazione nei
-confronti dei processi. Non portano con sé nessuna informazione che non sia il
-loro tipo; si tratta in sostanza di un'interruzione software portata ad un
-processo.
+confronti dei processi. Nella loro versione originale essi portano con sé
+nessuna informazione che non sia il loro tipo; si tratta in sostanza di
+un'interruzione software portata ad un processo.
 
 In genere essi vengono usati dal kernel per riportare ai processi situazioni
 eccezionali (come errori di accesso, eccezioni aritmetiche, etc.) ma possono
 
 In genere essi vengono usati dal kernel per riportare ai processi situazioni
 eccezionali (come errori di accesso, eccezioni aritmetiche, etc.) ma possono
@@ -16,7 +16,8 @@ In questo capitolo esamineremo i vari aspetti della gestione dei segnali,
 partendo da una introduzione relativa ai concetti base con cui essi vengono
 realizzati, per poi affrontarne la classificazione a secondo di uso e modalità
 di generazione fino ad esaminare in dettaglio funzioni e le metodologie di
 partendo da una introduzione relativa ai concetti base con cui essi vengono
 realizzati, per poi affrontarne la classificazione a secondo di uso e modalità
 di generazione fino ad esaminare in dettaglio funzioni e le metodologie di
-gestione. 
+gestione avanzate e le estensioni fatte all'interfaccia classica nelle nuovi
+versioni dello standard POSIX.
 
 
 \section{Introduzione}
 
 
 \section{Introduzione}
@@ -2468,8 +2469,57 @@ disponibili, vale a dire che c'
 e diventa pendente; una volta consegnato riporterà nel campo \var{si\_code} di
 \var{siginfo} il valore \macro{SI\_QUEUE} e il campo \var{si\_value} riceverà
 quanto inviato con \param{value}. Se invece si è installato un manipolatore
 e diventa pendente; una volta consegnato riporterà nel campo \var{si\_code} di
 \var{siginfo} il valore \macro{SI\_QUEUE} e il campo \var{si\_value} riceverà
 quanto inviato con \param{value}. Se invece si è installato un manipolatore
-nella forma classica il segnale sarà generato, ma in caso di emissioni
-multiple prima dell'esecuzione del manipolatore, sarà ricevuto una sola volta.
+nella forma classica il segnale sarà generato, ma tutte le caratteristiche
+tipiche dei segnali real-time (priorità e coda) saranno perse.
+
+Lo standard POSIX.1b definisce inoltre delle nuove funzioni che permettono di
+gestire l'attesa di segnali specifici su una coda; la prima di queste è
+\func{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} viene settata ai valori:
+  \begin{errlist}
+  \item[\macro{EINVAL}] Si è specificato un valore non valido per
+    \param{set}.
+  \end{errlist}
+  ed inoltre \macro{EFAULT}.}
+\end{prototype}
+
+
+Altre due funzioni, usate prevalentemente con i thread, sono
+\func{sigwaitinfo} e \func{sigtimedwait}, i loro prototipi sono:
+\begin{functions}
+  \headdecl{signal.h}   
+
+  \funcdecl{int sigwaitinfo(const sigset\_t *set, siginfo\_t *info)}  
+
+  Attende che uno dei segnali specificati in \param{set} sia pendente.
+  
+  \funcdecl{int sigtimedwait(const sigset\_t *set, siginfo\_t *info, const
+    struct timespec *timeout)}
+
+  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} viene settata ai valori:
+  \begin{errlist}
+  \item[\macro{EINVAL}] Si è specificato un valore non valido per
+  \item[\macro{EAGAIN}] La coda è esarita, ci sono già \macro{SIGQUEUE\_MAX}
+    segnali in attesa si consegna.
+  \item[\macro{EINTR}] Non si hanno privilegi appropriati per inviare il
+    segnale al processo specificato.
+  \item[\macro{ENOSYS}] Il processo \param{pid} non esiste.
+    \param{set}.
+  \end{errlist}
+  ed inoltre \macro{EFAULT}.}
+\end{functions}
+
+