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
 \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]
 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
 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
 
 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}
 
 
 \section{L'accesso \textsl{asincrono} ai file}