Finita timerfd.
authorSimone Piccardi <piccardi@gnulinux.it>
Mon, 28 Apr 2014 14:28:14 +0000 (14:28 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Mon, 28 Apr 2014 14:28:14 +0000 (14:28 +0000)
fileadv.tex

index e37ae0e9357dcc82da4e153c455fbe5188020666..169586b265059806b835cca6fd7c23ad7f741856 100644 (file)
@@ -2476,9 +2476,9 @@ tab.~\ref{tab:sig_timer_clockid_types}, ma al momento i soli utilizzabili sono
 \const{CLOCK\_REALTIME} e \const{CLOCK\_MONOTONIC}. L'argomento \param{flags},
 come l'analogo di \func{signalfd}, consente di impostare i flag per l'I/O non
 bloccante ed il \textit{close-on-exec} sul file descriptor
-restituito,\footnote{esso è stato introdotto a partire dal kernel 2.6.27, per
-  le versioni precedenti deve essere passato un valore nullo.} e deve essere
-specificato come una maschera binaria delle costanti riportate in
+restituito,\footnote{il flag è stato introdotto a partire dal kernel 2.6.27,
+  per le versioni precedenti deve essere passato un valore nullo.} e deve
+essere specificato come una maschera binaria delle costanti riportate in
 tab.~\ref{tab:timerfd_flags}.
 
 \begin{table}[htb]
@@ -2588,33 +2588,38 @@ prototipo è:
 La funzione consente di rileggere le impostazioni del timer associato al file
 descriptor \param{fd} nella struttura \struct{itimerspec} puntata
 da \param{curr\_value}. Il campo \var{it\_value} riporta il tempo rimanente
-alla prossima scadenza, che viene sempre espresso in forma relativa
-(indipendentemente dal fatto che si sia specificato
-\const{TFD\_TIMER\_ABSTIME} quando lo si è armato). Un valore nullo (di
-entrambi i campi di \var{it\_value}) indica che il timer non è stato ancora
-armato. Il campo \var{it\_interval} riporta la durata dell'intervallo di
-ripetizione del timer, ed un valore nulle (di entrambi i campi) indica che il
-timer è stato impostato per scadere una sola volta.
+alla prossima scadenza del timer, che viene sempre espresso in forma relativa,
+anche se lo si è armato specificando \const{TFD\_TIMER\_ABSTIME}. Un valore
+nullo (di entrambi i campi di \var{it\_value}) indica invece che il timer non
+è stato ancora armato. Il campo \var{it\_interval} riporta la durata
+dell'intervallo di ripetizione del timer, ed un valore nullo (di entrambi i
+campi) indica che il timer è stato impostato per scadere una sola volta.
 
 Il timer creato con \func{timerfd\_create} notificherà la sua scadenza
 rendendo pronto per la lettura il file descriptor ad esso associato, che
 pertanto potrà essere messo sotto controllo con una qualunque delle varie
-funzioni dell'I/O multiplexing. Esso infatti risulterà pronto soltanto in
-presenza di una o più scadenze del timer cui è associato. 
-
-Inoltre sarà possibile ottenere il numero di volte che il timer è scaduto
-dalla ultima impostazione che può essere usato per leggere le notifiche delle
-scadenze dei timer. Queste possono essere ottenute leggendo in maniera
-ordinaria il file descriptor con una \func{read},
-
-Una volta che 
-
-
-% TODO trattare qui eventfd, timerfd introdotte con il 2.6.22 
-% timerfd è stata tolta nel 2.6.23 e rifatta per bene nel 2.6.25
-% vedi: http://lwn.net/Articles/233462/
-%       http://lwn.net/Articles/245533/
-%       http://lwn.net/Articles/267331/
+funzioni dell'I/O multiplexing viste in precedenza. Una volta che il file
+descriptor risulta pronto sarà possibile leggere il numero di volte che il
+timer è scaduto con una ordinaria \func{read}. 
+
+La funzione legge il valore in un dato di tipo \type{uint64\_t}, e necessita
+pertanto che le si passi un buffer di almeno 8 byte, fallendo con
+\errvl{EINVAL} in caso contrario, in sostanza la lettura deve essere
+effettuata con una istruzione del tipo:
+\includecodesnip{listati/readtimerfd.c} 
+
+Il valore viene restituito da \func{read} seguendo l'ordinamento dei bit
+(\textit{big-endian} o \textit{little-endian}) nativo della macchina in uso,
+ed indica il numero di volte che il timer è scaduto dall'ultima lettura
+eseguita con successo, o, se lo si legge per la prima volta, da quando lo si è
+impostato con \func{timerfd\_settime}. Se il timer non è scaduto la funzione
+si blocca fino alla prima scadenza, a meno di non aver creato il file
+descriptor in modalità non bloccante con \const{TFD\_NONBLOCK} o aver
+impostato la stessa con \func{fcntl}, nel qual caso fallisce con l'errore di
+\errval{EAGAIN}.
+
+
+% TODO trattare qui eventfd introdotte con il 2.6.22 
 
 
 \section{L'accesso \textsl{asincrono} ai file}