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 {
-    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
-(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
@@ -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
-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
@@ -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
-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,
@@ -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}
-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
@@ -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,
-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}
 
@@ -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:
-  \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}
 
-
-% 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:  epoch multiplexing
+% LocalWords:  epoch multiplexing overrun
 
 
 %%% Local Variables: