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.
\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}
\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
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
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