X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileadv.tex;h=e37ae0e9357dcc82da4e153c455fbe5188020666;hp=f3b6b66673c4c793af0a1a325f4b4ad45ff51888;hb=42be481368b2c00967492146deb67a00ba834347;hpb=67794e5214c13e46667b290dfd9f3014261a41d7 diff --git a/fileadv.tex b/fileadv.tex index f3b6b66..e37ae0e 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -807,7 +807,9 @@ comportamento sui file duplicati e nel passaggio attraverso \func{fork} ed \func{exec}. Per questo stesso motivo la funzione non è equivalente a \func{flock} e può essere usata senza interferenze insieme a quest'ultima. - +% TODO trattare i POSIX file-private lock introdotti con il 3.15, +% vedi http://lwn.net/Articles/586904/ correlato: +% http://www.samba.org/samba/news/articles/low_point/tale_two_stds_os2.html \subsection{Il \textit{mandatory locking}} \label{sec:file_mand_locking} @@ -2447,7 +2449,7 @@ prototipo è: \fhead{sys/timerfd.h} \fdecl{int timerfd\_create(int clockid, int flags)} -\fdesc{Crea un timer associato ad un file descriptor per la notifica.} +\fdesc{Crea un timer associato ad un file descriptor di notifica.} } {La funzione ritorna un numero di file descriptor in caso di successo e $-1$ @@ -2524,7 +2526,7 @@ di \func{timer\_settime} per la nuova interfaccia; questa è const struct itimerspec *new\_value,\\ \phantom{int timerfd\_settime(}struct itimerspec *old\_value)} -\fdesc{Crea un timer associato ad un file descriptor per la notifica.} +\fdesc{Arma un timer associato ad un file descriptor di notifica.} } {La funzione ritorna un numero di file descriptor in caso di successo e $-1$ @@ -2550,24 +2552,25 @@ argomenti sono del tutto analoghi a quelli della omologa funzione I valori ed il significato di questi argomenti sono gli stessi che sono già stati illustrati in dettaglio in sez.~\ref{sec:sig_timer_adv} e non staremo a -ripetere quanto detto in quell'occasione;\footnote{per brevità si ricordi che - con \param{new\_value.it\_value} si indica la prima scadenza del timer e - con \param{new\_value.it\_interval} la sua periodicità.} l'unica differenza +ripetere quanto detto in quell'occasione; per brevità si ricordi che +con \param{new\_value.it\_value} si indica la prima scadenza del timer e +con \param{new\_value.it\_interval} la sua periodicità. L'unica differenza riguarda l'argomento \param{flags} che serve sempre ad indicare se il tempo di scadenza del timer è da considerarsi relativo o assoluto rispetto al valore corrente dell'orologio associato al timer, ma che in questo caso ha come -valori possibili rispettivamente soltanto $0$ e -\const{TFD\_TIMER\_ABSTIME}.\footnote{anche questo valore, che è l'analogo di - \const{TIMER\_ABSTIME} è l'unico attualmente possibile per \param{flags}.} +valori possibili rispettivamente soltanto $0$ e \const{TFD\_TIMER\_ABSTIME} +(l'analogo di \const{TIMER\_ABSTIME}). -L'ultima funzione prevista dalla nuova interfaccia è \funcd{timerfd\_gettime}, -che è l'analoga di \func{timer\_gettime}, il suo prototipo è: +L'ultima funzione di sistema prevista dalla nuova interfaccia è +\funcd{timerfd\_gettime}, che è l'analoga di \func{timer\_gettime}, il suo +prototipo è: \begin{funcproto}{ \fhead{sys/timerfd.h} \fdecl{int timerfd\_gettime(int fd, struct itimerspec *curr\_value)} -\fdesc{Crea un timer associato ad un file descriptor per la notifica.} +\fdesc{Legge l'impostazione di un timer associato ad un file descriptor di + notifica.} } {La funzione ritorna un numero di file descriptor in caso di successo e $-1$ @@ -2579,19 +2582,33 @@ che è l'analoga di \func{timer\_gettime}, il suo prototipo è: con \func{timerfd\_create}. \item[\errcode{EFAULT}] o \param{curr\_value} non è un puntatore valido. \end{errlist} -ed inoltre nel suo significato generico. - } \end{funcproto} -Questo infatti diverrà pronto in lettura per tutte le varie funzioni dell'I/O -multiplexing in presenza di una o più scadenze del timer ad esso associato. +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. + +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 @@ -5559,6 +5576,9 @@ livello di kernel. % vedi http://lwn.net/Articles/226710/ e http://lwn.net/Articles/240571/ % http://kernelnewbies.org/Linux_2_6_23 +% TODO aggiungere FALLOC_FL_ZERO_RANGE e FALLOC_FL_COLLAPSE_RANGE, inseriti +% nel kenrel 3.15 (sul secondo vedi http://lwn.net/Articles/589260/) + % TODO non so dove trattarli, ma dal 2.6.39 ci sono i file handle, vedi % http://lwn.net/Articles/432757/