Ancora materiale sui timer POSIX (grazie alle code agli uffici pubblici)
authorSimone Piccardi <piccardi@gnulinux.it>
Fri, 18 Jun 2010 13:35:15 +0000 (13:35 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Fri, 18 Jun 2010 13:35:15 +0000 (13:35 +0000)
signal.tex

index 0c2b7e03e86eb6118eb99ae22a1233770171c72d..83f35f1503098d93ff4ac8d86046085b31c450a6 100644 (file)
@@ -3062,9 +3062,8 @@ avviati) tramite la funzione \funcd{timer\_create}, il cui prototipo 
   
   Crea un nuovo timer Posix.
   
   
   Crea un nuovo timer Posix.
   
-  \bodydesc{La funzione restituisce 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}:
+  \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{EAGAIN}] fallimento nel tentativo di allocare le strutture
     dei timer.
   \begin{errlist}
   \item[\errcode{EAGAIN}] fallimento nel tentativo di allocare le strutture
     dei timer.
@@ -3098,8 +3097,8 @@ meccanimo di notifica.
     \includestruct{listati/sigevent.h}
   \end{minipage} 
   \normalsize 
     \includestruct{listati/sigevent.h}
   \end{minipage} 
   \normalsize 
-  \caption{La struttura \structd{sigevent}, usata per specificare le modalità
-    di notifica degli eventi relativi alle operazioni di I/O asincrono.}
+  \caption{La struttura \structd{sigevent}, usata per specificare in maniera
+    generica diverse modalità di notifica degli eventi.}
   \label{fig:struct_sigevent}
 \end{figure}
 
   \label{fig:struct_sigevent}
 \end{figure}
 
@@ -3139,7 +3138,7 @@ effettuata. Diventa cos
                              \itindex{thread} \textit{thread} che esegue la
                              funzione di notifica specificata da
                              \var{sigev\_notify\_function} con argomento
                              \itindex{thread} \textit{thread} che esegue la
                              funzione di notifica specificata da
                              \var{sigev\_notify\_function} con argomento
-                             \var{sigev\_value}, se diverso da \const{NULL} il
+                             \var{sigev\_value}, se diverso da \val{NULL} il
                              \textit{thread} viene creato con gli attributi
                              specificati da \var{sigev\_notify\_attribute}.\\
     \const{SIGEV\_THREAD\_ID}& Invia la notifica come segnale (con le stesse
                              \textit{thread} viene creato con gli attributi
                              specificati da \var{sigev\_notify\_attribute}.\\
     \const{SIGEV\_THREAD\_ID}& Invia la notifica come segnale (con le stesse
@@ -3160,7 +3159,7 @@ effettuata. Diventa cos
 Nel caso di \func{timer\_create} occorrerà passare alla funzione come secondo
 argomento l'indirizzo di una di queste strutture per indicare le modalità con
 cui si vuole essere notificati della scadenza del timer, se non si specifica
 Nel caso di \func{timer\_create} occorrerà passare alla funzione come secondo
 argomento l'indirizzo di una di queste strutture per indicare le modalità con
 cui si vuole essere notificati della scadenza del timer, se non si specifica
-nulla (passando un valore \const{NULL}) verrà inviato il segnale
+nulla (passando un valore \val{NULL}) verrà inviato il segnale
 \const{SIGALRM} al processo corrente, o per essere più precisi verrà
 utilizzato un valore equivalente all'aver specificato \const{SIGEV\_SIGNAL}
 per \var{sigev\_notify}, \const{SIGALRM} per \var{sigev\_signo} e
 \const{SIGALRM} al processo corrente, o per essere più precisi verrà
 utilizzato un valore equivalente all'aver specificato \const{SIGEV\_SIGNAL}
 per \var{sigev\_notify}, \const{SIGALRM} per \var{sigev\_signo} e
@@ -3183,8 +3182,67 @@ 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}
 
 processo è limitato dalle dimensioni di detta coda, ed anche, qualora questo
 sia stato impostato, dal limite \const{RLIMIT\_SIGPENDING}
 
-Una volta creato il timer si può attivare o disattivare un allarme con la
-fuzione \funcd{timer\_settime}, 
+Una volta creato il timer \func{timer\_create} ed ottenuto il relativo
+identificatore, si può attivare o disattivare un allarme (in gergo
+\textsl{armare} o \textsl{disarmare} il timer) con la fuzione
+\funcd{timer\_settime}, il cui prototipo è:
+\begin{functions}
+  \headdecl{signal.h}
+  \headdecl{time.h}
+
+  \funcdecl{int timer\_settime(timer\_t timerid, int flags, const struct
+    itimerspec *new\_value, struct itimerspec *old\_value)}
+  
+  Arma o disarma il timer POSIX.
+  
+  \bodydesc{La funzione restituisce 0 in caso di successo e $-1$
+    in caso di errore, nel qual caso \var{errno} assumerà 
+    errore, nel qual caso \var{errno} assumerà uno dei seguenti valori:
+  \begin{errlist}
+  \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}
+
+La funzione richiede che si indici la scadenza del timer con
+l'argomento \param{new\_value}, che deve essere specificato come puntatore ad
+una struttura di tipo \struct{itimerspec}, la cui definizione è riportata in
+fig.~\ref{fig:struct_itimerspec}, se \param{old\_value} è diverso da
+\val{NULL} il precedente valore verrà restituito in questa struttura.
+
+\begin{figure}[!htb]
+  \footnotesize \centering
+  \begin{minipage}[c]{15cm}
+    \includestruct{listati/itimerspec.h}
+  \end{minipage} 
+  \normalsize 
+  \caption{La struttura \structd{itimerspec}, usata per specificare la
+    scadenza di un allarme.}
+  \label{fig:struct_itimerspec}
+\end{figure}
+
+Ciascuno dei due campi di \struct{itimerspec} indica un tempo, da specificare
+con una precisione fino al nanosecondo tramite una struttura \struct{timespec}
+(la cui definizione è riportata fig.~\ref{fig:sys_timespec_struct})). Il campo
+\var{it\_value} indica la prima scadenza dell'allarme. Di default, quando il
+valore di \param{flag} è nullo, questo valore viene considerato come un
+intervallo relativo al tempo corrente,\footnote{il primo allarme scatterà cioè
+  dopo il numero di secondi e nanosecondi indicati da questo campo.} se invece
+si usa per \param{flag} il valore \const{TIMER\_ABSTIME}, \var{it\_value}
+viene considerato come valore assoluto rispetto al valore dell'orologio a cui
+è associato il timer.\footnote{quindi a seconda dell'orologio che si usa, si
+  può indicare sia un tempo assoluto, se si opera rispetto all'orologio di
+  sistema (nel qual caso il valore deve essere in secondi e nanosecondi dalla
+  \textit{epoch}) o come un certo numero di secondi o nanosecondi rispetto
+  alla partenza di un orologio di CPU, }
+
+Se il valore di \var{it\_interval} è nullo (se cioè sono nulli tutti e due i
+valori di detta struttura \struct{timespec}) l'allarme scatterà 
 
 % TODO trattare i Posix timer, e le fuzioni:
 % timer_getoverrun, timer_gettime, timer_settime, timer_create, timer_delete
 
 % TODO trattare i Posix timer, e le fuzioni:
 % timer_getoverrun, timer_gettime, timer_settime, timer_create, timer_delete