Finiti per la trattazione i timer posix.
authorSimone Piccardi <piccardi@gnulinux.it>
Sun, 25 Jul 2010 20:40:47 +0000 (20:40 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Sun, 25 Jul 2010 20:40:47 +0000 (20:40 +0000)
listati/siginfo_t.h
signal.tex

index ec8ad752991542e56d64dad448887d66b3cc5173..7045a66cc0e1e429b4a1f9259a9694a7e933ffb7 100644 (file)
@@ -1,16 +1,20 @@
 siginfo_t {
 siginfo_t {
-    int      si_signo;  /* Signal number */
-    int      si_errno;  /* An errno value */
-    int      si_code;   /* Signal code */
-    pid_t    si_pid;    /* Sending process ID */
-    uid_t    si_uid;    /* Real user ID of sending process */
-    int      si_status; /* Exit value or signal */
-    clock_t  si_utime;  /* User time consumed */
-    clock_t  si_stime;  /* System time consumed */
-    sigval_t si_value;  /* Signal value */
-    int      si_int;    /* POSIX.1b signal */
-    void *   si_ptr;    /* POSIX.1b signal */
-    void *   si_addr;   /* Memory location which caused fault */
-    int      si_band;   /* Band event */
-    int      si_fd;     /* File descriptor */
+    int      si_signo;   /* Signal number */
+    int      si_errno;   /* An errno value */
+    int      si_code;    /* Signal code */
+    int      si_trapno;  /* Trap number that caused hardware-generated 
+                           signal (unused on most architectures) */
+    pid_t    si_pid;     /* Sending process ID */
+    uid_t    si_uid;     /* Real user ID of sending process */
+    int      si_status;  /* Exit value or signal */
+    clock_t  si_utime;   /* User time consumed */
+    clock_t  si_stime;   /* System time consumed */
+    sigval_t si_value;   /* Signal value */
+    int      si_int;     /* POSIX.1b signal */
+    void *   si_ptr;     /* POSIX.1b signal */
+    int      si_overrun; /* Timer overrun count; POSIX.1b timers */
+    int      si_timerid; /* Timer ID; POSIX.1b timers */
+    void *   si_addr;    /* Memory location which caused fault */
+    long     si_band;    /* Band event (was int before glibc 2.3.2) */
+    int      si_fd;      /* File descriptor */
 }
 }
index e4aaa11b885a5d043919f6297923911f806d2c29..addf4f0be7d183cab130f151cad31f02320bb95a 100644 (file)
@@ -1988,7 +1988,9 @@ rispettivamente lo stato di uscita, l'\textit{user time} e il \textit{system
 \var{si\_addr} con l'indirizzo in cui è avvenuto l'errore, \const{SIGIO} (vedi
 sez.~\ref{sec:file_asyncronous_io}) avvalora \var{si\_fd} con il numero del
 file descriptor e \var{si\_band} per i \itindex{out-of-band} dati urgenti
 \var{si\_addr} con l'indirizzo in cui è avvenuto l'errore, \const{SIGIO} (vedi
 sez.~\ref{sec:file_asyncronous_io}) avvalora \var{si\_fd} con il numero del
 file descriptor e \var{si\_band} per i \itindex{out-of-band} dati urgenti
-(vedi sez.~\ref{sec:TCP_urgent_data}) su un socket.
+(vedi sez.~\ref{sec:TCP_urgent_data}) su un socket, il segnale inviato alla
+scadenza di un timer POSIX (vedi sez.~\ref{sec:sig_timer_adv}) avvalora i
+campi \var{si\_timerid} e \var{si\_overrun}.
 
 Benché sia possibile usare nello stesso programma sia \func{sigaction} che
 \func{signal} occorre molta attenzione, in quanto le due funzioni possono
 
 Benché sia possibile usare nello stesso programma sia \func{sigaction} che
 \func{signal} occorre molta attenzione, in quanto le due funzioni possono
@@ -3179,7 +3181,7 @@ segnale \textit{real-time} per ciascun timer che viene creato con
 \func{timer\_create}; dato che ciascuno di essi richiede un posto nella coda
 dei segnali \textit{real-time}, il numero massimo di timer utilizzabili da un
 processo è limitato dalle dimensioni di detta coda, ed anche, qualora questo
 \func{timer\_create}; dato che ciascuno di essi richiede un posto nella coda
 dei segnali \textit{real-time}, il numero massimo di timer utilizzabili da un
 processo è limitato dalle dimensioni di detta coda, ed anche, qualora questo
-sia stato impostato, dal limite \const{RLIMIT\_SIGPENDING}
+sia stato impostato, dal limite \const{RLIMIT\_SIGPENDING}.
 
 Una volta creato il timer \func{timer\_create} ed ottenuto il relativo
 identificatore, si può attivare o disattivare un allarme (in gergo
 
 Una volta creato il timer \func{timer\_create} ed ottenuto il relativo
 identificatore, si può attivare o disattivare un allarme (in gergo
@@ -3250,7 +3252,8 @@ impostare un allarme periodico.  Se il suo valore 
 tutti e due i valori di detta struttura \struct{timespec}) l'allarme scatterà
 una sola volta secondo quando indicato con \var{it\_value}, altrimenti il
 valore specificato verrà preso come l'estensione del periodo di ripetizione
 tutti e due i valori di detta struttura \struct{timespec}) l'allarme scatterà
 una sola volta secondo quando indicato con \var{it\_value}, altrimenti il
 valore specificato verrà preso come l'estensione del periodo di ripetizione
-della generazione dell'allarme.
+della generazione dell'allarme, che proseguirà indefinitamente fintanto che
+non si disarmi il timer.
 
 Se il timer era già stato armato la funzione sovrascrive la precedente
 impostazione, se invece si indica come prima scadenza un tempo già passato,
 
 Se il timer era già stato armato la funzione sovrascrive la precedente
 impostazione, se invece si indica come prima scadenza un tempo già passato,
@@ -3297,9 +3300,12 @@ nullo se non ve ne sono state. Come estensione specifica di Linux,\footnote{in
   segnali e non ne parla affatto in riferimento ai \textit{thread}.}  quando
 si usa un segnale come meccanismo di notifica, si può ottenere direttamente
 questo valore nel campo \var{si\_overrun} della struttura \struct{siginfo\_t}
   segnali e non ne parla affatto in riferimento ai \textit{thread}.}  quando
 si usa un segnale come meccanismo di notifica, si può ottenere direttamente
 questo valore nel campo \var{si\_overrun} della struttura \struct{siginfo\_t}
-restituita al gestore del segnale installato con \func{sigaction}, in questo
-modo non è più necessario eseguire successivamente una chiamata a questa
-funzione.
+(illustrata in fig.~\ref{fig:sig_siginfo_t}) restituita al gestore del segnale
+installato con \func{sigaction}; in questo modo non è più necessario eseguire
+successivamente una chiamata a questa funzione per ottenere il numero delle
+scadenze. Al gestore del segnale viene anche restituito, come ulteriore
+informazione, l'identificativo del timer, in questo caso nel campo
+\var{si\_timerid}.
 
 Qualora si voglia rileggere lo stato corrente di un timer, ed ottenere il
 tempo mancante ad una sua eventuale scadenza, si deve utilizzare la funzione
 
 Qualora si voglia rileggere lo stato corrente di un timer, ed ottenere il
 tempo mancante ad una sua eventuale scadenza, si deve utilizzare la funzione
@@ -3337,10 +3343,10 @@ impostato per una ripetizione e doveva operare, come suol dirsi, a colpo
 singolo (in gergo \textit{one shot}).
 
 Infine, quando un timer non viene più utilizzato, lo si può cancellare,
 singolo (in gergo \textit{one shot}).
 
 Infine, quando un timer non viene più utilizzato, lo si può cancellare,
-rimuovendolo dal sistema e recuperando le relative risorse, eseguendo
-l'operazione inversa rispetto a \funcd{timer\_create}. Per questo compito lo
-standard prevede una apposita funzione \funcd{timer\_delete}, il cui prototipo
-è:
+rimuovendolo dal sistema e recuperando le relative risorse, effettuando in
+sostanza l'operazione inversa rispetto a \funcd{timer\_create}. Per questo
+compito lo standard prevede una apposita funzione \funcd{timer\_delete}, il
+cui prototipo è:
 \begin{functions}
   \headdecl{time.h}
 
 \begin{functions}
   \headdecl{time.h}
 
@@ -3350,16 +3356,16 @@ standard prevede una apposita funzione \funcd{timer\_delete}, il cui prototipo
   
   \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:
   
   \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.
-  \end{errlist}
+    \begin{errlist}
+    \item[\errcode{EINVAL}] \param{timerid} non indica un timer valido.
+    \end{errlist}
 }
 \end{functions}
 
 }
 \end{functions}
 
-
-% TODO trattare i Posix timer, e le funzioni:
-% timer_delete
-
+La funzione elimina il timer identificato da \param{timerid}, disarmandolo se
+questo era stato attivato. Nel caso poco probabile, ma comunque possibile, che
+un timer venga cancellato prima della ricezione del segnale pendente per la
+notifica di una scadenza, il comportamento del sistema è indefinito. 
 
 
 
 
 
 
@@ -3443,7 +3449,7 @@ eventi generici) basato direttamente sull'uso di file descriptor.
 % LocalWords:  resolution CONFIG RES patch REALTIME MONOTONIC RAW NTP CPUTIME
 % LocalWords:  tick calendar The Epoch list getcpuclockid capability CAP getres
 % LocalWords:  ENOSYS pthread ENOENT NULL attribute itimerspec new old ABSTIME
 % LocalWords:  resolution CONFIG RES patch REALTIME MONOTONIC RAW NTP CPUTIME
 % LocalWords:  tick calendar The Epoch list getcpuclockid capability CAP getres
 % LocalWords:  ENOSYS pthread ENOENT NULL attribute itimerspec new old ABSTIME
-% LocalWords:  epoch multiplexing
+% LocalWords:  epoch multiplexing overrun
 
 
 %%% Local Variables: 
 
 
 %%% Local Variables: