Merge branch 'master' of ssh://roach.truelite.it/srv/git/gapil
[gapil.git] / fileadv.tex
index 3b560d7b57802ca53131e2c3515f2716eed08729..3912584a1ec6e4810b113188b0f19af962ec7585 100644 (file)
@@ -52,7 +52,7 @@ lettura o scrittura.
 La prima modalità di \textit{file locking} che è stata implementata nei
 sistemi unix-like è quella che viene usualmente chiamata \textit{advisory
   locking},\footnote{Stevens in \cite{APUE} fa riferimento a questo argomento
 La prima modalità di \textit{file locking} che è stata implementata nei
 sistemi unix-like è quella che viene usualmente chiamata \textit{advisory
   locking},\footnote{Stevens in \cite{APUE} fa riferimento a questo argomento
-  come al \textit{record locking}, dizione utilizzata anche dal manuale delle
+  come al \textit{record locking}, dizione utilizzata anche dal manuale della
   \acr{glibc}; nelle pagine di manuale si parla di \textit{discrectionary file
     lock} per \func{fcntl} e di \textit{advisory locking} per \func{flock},
   mentre questo nome viene usato da Stevens per riferirsi al \textit{file
   \acr{glibc}; nelle pagine di manuale si parla di \textit{discrectionary file
     lock} per \func{fcntl} e di \textit{advisory locking} per \func{flock},
   mentre questo nome viene usato da Stevens per riferirsi al \textit{file
@@ -553,7 +553,7 @@ regioni richieste e del tipo di operazione richiesta.
 Il comportamento seguito in questo caso è che la funzione ha successo ed
 esegue l'operazione richiesta sulla regione indicata; è compito del kernel
 preoccuparsi di accorpare o dividere le voci nella lista dei \textit{file
 Il comportamento seguito in questo caso è che la funzione ha successo ed
 esegue l'operazione richiesta sulla regione indicata; è compito del kernel
 preoccuparsi di accorpare o dividere le voci nella lista dei \textit{file
-  lock} per far si che le regioni bloccate da essa risultanti siano coerenti
+  lock} per far sì che le regioni bloccate da essa risultanti siano coerenti
 con quanto necessario a soddisfare l'operazione richiesta.
 
 \begin{figure}[!htbp]
 con quanto necessario a soddisfare l'operazione richiesta.
 
 \begin{figure}[!htbp]
@@ -1010,8 +1010,8 @@ BSD4.2 ed è stata standardizzata in BSD4.4, in seguito è stata portata su
 tutti i sistemi che supportano i socket, compreso le varianti di System V ed
 inserita in POSIX.1-2001; il suo prototipo è:\footnote{l'header
   \texttt{sys/select.h} è stato introdotto con POSIX.1-2001, è ed presente con
 tutti i sistemi che supportano i socket, compreso le varianti di System V ed
 inserita in POSIX.1-2001; il suo prototipo è:\footnote{l'header
   \texttt{sys/select.h} è stato introdotto con POSIX.1-2001, è ed presente con
-  le \acr{glibc} a partire dalla versione 2.0, in precedenza, con le
-  \acr{libc4} e le \acr{libc5}, occorreva includere \texttt{sys/time.h},
+  la \acr{glibc} a partire dalla versione 2.0, in precedenza, con le
+  \acr{libc4} e \acr{libc5}, occorreva includere \texttt{sys/time.h},
   \texttt{sys/types.h} e \texttt{unistd.h}.}
 
 \begin{funcproto}{
   \texttt{sys/types.h} e \texttt{unistd.h}.}
 
 \begin{funcproto}{
@@ -1162,7 +1162,7 @@ scritti per altri sistemi che non dispongono di questa caratteristica e
 ricalcolano \param{timeout} tutte le volte. In genere questa caratteristica è
 disponibile nei sistemi che derivano da System V e non è disponibile per
 quelli che derivano da BSD; lo standard POSIX.1-2001 non permette questo
 ricalcolano \param{timeout} tutte le volte. In genere questa caratteristica è
 disponibile nei sistemi che derivano da System V e non è disponibile per
 quelli che derivano da BSD; lo standard POSIX.1-2001 non permette questo
-comportamento e per questo motivo le \acr{glibc} nascondono il comportamento
+comportamento e per questo motivo la \acr{glibc} nasconde il comportamento
 passando alla \textit{system call} una copia dell'argomento \param{timeout}.
 
 Uno dei problemi che si presentano con l'uso di \func{select} è che il suo
 passando alla \textit{system call} una copia dell'argomento \param{timeout}.
 
 Uno dei problemi che si presentano con l'uso di \func{select} è che il suo
@@ -1187,9 +1187,9 @@ l'interfaccia creata da BSD, ma prevede che tutte le funzioni ad esso relative
 vengano dichiarate nell'header \headfiled{sys/select.h}, che sostituisce i
 precedenti, ed inoltre aggiunge a \func{select} una nuova funzione
 \funcd{pselect},\footnote{il supporto per lo standard POSIX 1003.1-2001, ed
 vengano dichiarate nell'header \headfiled{sys/select.h}, che sostituisce i
 precedenti, ed inoltre aggiunge a \func{select} una nuova funzione
 \funcd{pselect},\footnote{il supporto per lo standard POSIX 1003.1-2001, ed
-  l'header \headfile{sys/select.h}, compaiono in Linux a partire dalle
+  l'header \headfile{sys/select.h}, compaiono in Linux a partire dalla
   \acr{glibc} 2.1. Le \acr{libc4} e \acr{libc5} non contengono questo header,
   \acr{glibc} 2.1. Le \acr{libc4} e \acr{libc5} non contengono questo header,
-  le \acr{glibc} 2.0 contengono una definizione sbagliata di \func{psignal},
+  la \acr{glibc} 2.0 contiene una definizione sbagliata di \func{psignal},
   senza l'argomento \param{sigmask}, la definizione corretta è presente dalle
   \acr{glibc} 2.1-2.2.1 se si è definito \macro{\_GNU\_SOURCE} e nelle
   \acr{glibc} 2.2.2-2.2.4 se si è definito \macro{\_XOPEN\_SOURCE} con valore
   senza l'argomento \param{sigmask}, la definizione corretta è presente dalle
   \acr{glibc} 2.1-2.2.1 se si è definito \macro{\_GNU\_SOURCE} e nelle
   \acr{glibc} 2.2.2-2.2.4 se si è definito \macro{\_XOPEN\_SOURCE} con valore
@@ -1221,7 +1221,7 @@ La funzione è sostanzialmente identica a \func{select}, solo che usa una
 struttura \struct{timespec} (vedi fig.~\ref{fig:sys_timespec_struct}) per
 indicare con maggiore precisione il timeout e non ne aggiorna il valore in
 caso di interruzione. In realtà anche in questo caso la \textit{system call}
 struttura \struct{timespec} (vedi fig.~\ref{fig:sys_timespec_struct}) per
 indicare con maggiore precisione il timeout e non ne aggiorna il valore in
 caso di interruzione. In realtà anche in questo caso la \textit{system call}
-di Linux aggiorna il valore al tempo rimanente, ma la funzione fornita dalle
+di Linux aggiorna il valore al tempo rimanente, ma la funzione fornita dalla
 \acr{glibc} modifica questo comportamento passando alla \textit{system call}
 una variabile locale, in modo da mantenere l'aderenza allo standard POSIX che
 richiede che il valore di \param{timeout} non sia modificato. 
 \acr{glibc} modifica questo comportamento passando alla \textit{system call}
 una variabile locale, in modo da mantenere l'aderenza allo standard POSIX che
 richiede che il valore di \param{timeout} non sia modificato. 
@@ -1260,7 +1260,7 @@ Per questo è stata introdotta \func{pselect} che attraverso l'argomento
 \param{sigmask} permette di riabilitare la ricezione il segnale
 contestualmente all'esecuzione della funzione,\footnote{in Linux però, fino al
   kernel 2.6.16, non era presente la relativa \textit{system call}, e la
 \param{sigmask} permette di riabilitare la ricezione il segnale
 contestualmente all'esecuzione della funzione,\footnote{in Linux però, fino al
   kernel 2.6.16, non era presente la relativa \textit{system call}, e la
-  funzione era implementata nelle \acr{glibc} attraverso \func{select} (vedi
+  funzione era implementata nella \acr{glibc} attraverso \func{select} (vedi
   \texttt{man select\_tut}) per cui la possibilità di \textit{race condition}
   permaneva; in tale situazione si può ricorrere ad una soluzione alternativa,
   chiamata \itindex{self-pipe~trick} \textit{self-pipe trick}, che consiste
   \texttt{man select\_tut}) per cui la possibilità di \textit{race condition}
   permaneva; in tale situazione si può ricorrere ad una soluzione alternativa,
   chiamata \itindex{self-pipe~trick} \textit{self-pipe trick}, che consiste
@@ -1490,7 +1490,7 @@ puntatore ad una struttura \struct{timespec}, gli altri argomenti comuni con
 risultati illustrati in precedenza. Come nel caso di \func{pselect} la
 \textit{system call} che implementa \func{ppoll} restituisce, se la funzione
 viene interrotta da un segnale, il tempo mancante in \param{timeout}, e come
 risultati illustrati in precedenza. Come nel caso di \func{pselect} la
 \textit{system call} che implementa \func{ppoll} restituisce, se la funzione
 viene interrotta da un segnale, il tempo mancante in \param{timeout}, e come
-per \func{pselect} la funzione di libreria fornita dalle \acr{glibc} maschera
+per \func{pselect} la funzione di libreria fornita dalla \acr{glibc} maschera
 questo comportamento non modificando mai il valore di \param{timeout} anche se
 in questo caso non esiste nessuno standard che richieda questo comportamento.
 
 questo comportamento non modificando mai il valore di \param{timeout} anche se
 in questo caso non esiste nessuno standard che richieda questo comportamento.
 
@@ -1562,13 +1562,13 @@ Nel caso di Linux al momento la sola interfaccia che fornisce questo tipo di
 servizio è chiamata \textit{epoll},\footnote{l'interfaccia è stata creata da
   Davide Libenzi, ed è stata introdotta per la prima volta nel kernel 2.5.44,
   ma la sua forma definitiva è stata raggiunta nel kernel 2.5.66, il supporto
 servizio è chiamata \textit{epoll},\footnote{l'interfaccia è stata creata da
   Davide Libenzi, ed è stata introdotta per la prima volta nel kernel 2.5.44,
   ma la sua forma definitiva è stata raggiunta nel kernel 2.5.66, il supporto
-  è stato aggiunto nelle \acr{glibc} a partire dalla versione 2.3.2.} anche se
+  è stato aggiunto nella \acr{glibc} a partire dalla versione 2.3.2.} anche se
 sono state in discussione altre interfacce con le quali effettuare lo stesso
 tipo di operazioni; \textit{epoll} è in grado di operare sia in modalità
 \textit{level triggered} che \textit{edge triggered}.
 
 sono state in discussione altre interfacce con le quali effettuare lo stesso
 tipo di operazioni; \textit{epoll} è in grado di operare sia in modalità
 \textit{level triggered} che \textit{edge triggered}.
 
-La prima versione di \textit{epoll} prevedeva l'apertura di uno speciale file
-di dispositivo, \texttt{/dev/epoll}, per ottenere un file descriptor da
+La prima versione di \textit{epoll} prevedeva l'uso di uno speciale file di
+dispositivo, \texttt{/dev/epoll}, per ottenere un file descriptor da
 utilizzare con le funzioni dell'interfaccia ma poi si è passati all'uso di
 apposite \textit{system call}.  Il primo passo per usare l'interfaccia di
 \textit{epoll} è pertanto quello ottenere detto file descriptor chiamando una
 utilizzare con le funzioni dell'interfaccia ma poi si è passati all'uso di
 apposite \textit{system call}.  Il primo passo per usare l'interfaccia di
 \textit{epoll} è pertanto quello ottenere detto file descriptor chiamando una
@@ -2069,14 +2069,14 @@ accesso ai dati relativi a questi ultimi.
 
 La funzione di sistema che permette di abilitare la ricezione dei segnali
 tramite file descriptor è \funcd{signalfd},\footnote{in realtà quella
 
 La funzione di sistema che permette di abilitare la ricezione dei segnali
 tramite file descriptor è \funcd{signalfd},\footnote{in realtà quella
-  riportata è l'interfaccia alla funzione fornita dalle \acr{glibc}, esistono
+  riportata è l'interfaccia alla funzione fornita dalla \acr{glibc}, esistono
   infatti due versioni diverse della \textit{system call}; una prima versione,
   infatti due versioni diverse della \textit{system call}; una prima versione,
-  \func{signalfd}, introdotta nel kernel 2.6.22 e disponibile con le
+  \func{signalfd}, introdotta nel kernel 2.6.22 e disponibile con la
   \acr{glibc} 2.8 che non supporta l'argomento \texttt{flags}, ed una seconda
   versione, \funcm{signalfd4}, introdotta con il kernel 2.6.27 e che è quella
   \acr{glibc} 2.8 che non supporta l'argomento \texttt{flags}, ed una seconda
   versione, \funcm{signalfd4}, introdotta con il kernel 2.6.27 e che è quella
-  che viene sempre usata a partire dalle \acr{glibc} 2.9, che prende un
+  che viene sempre usata a partire dalla \acr{glibc} 2.9, che prende un
   argomento aggiuntivo \code{size\_t sizemask} che indica la dimensione della
   argomento aggiuntivo \code{size\_t sizemask} che indica la dimensione della
-  maschera dei segnali, il cui valore viene impostato automaticamente dalle
+  maschera dei segnali, il cui valore viene impostato automaticamente dalla
   \acr{glibc}.}  il cui prototipo è:
 
 \begin{funcproto}{
   \acr{glibc}.}  il cui prototipo è:
 
 \begin{funcproto}{
@@ -2192,9 +2192,9 @@ tal caso qualora vi fossero segnali pendenti questi resteranno tali, e
 potranno essere ricevuti normalmente una volta che si rimuova il blocco
 imposto con \func{sigprocmask}.
 
 potranno essere ricevuti normalmente una volta che si rimuova il blocco
 imposto con \func{sigprocmask}.
 
-Oltre che con le funzioni dell'\textit{I/O multiplexing} l'uso del file
-descriptor restituito da \func{signalfd} cerca di seguire la semantica di un
-sistema unix-like anche con altre \textit{system call}; in particolare esso
+Oltre a poter essere usato con le funzioni dell'\textit{I/O multiplexing}, il
+file descriptor restituito da \func{signalfd} cerca di seguire la semantica di
+un sistema unix-like anche con altre \textit{system call}; in particolare esso
 resta aperto (come ogni altro file descriptor) attraverso una chiamata ad
 \func{exec}, a meno che non lo si sia creato con il flag di
 \const{SFD\_CLOEXEC} o si sia successivamente impostato il
 resta aperto (come ogni altro file descriptor) attraverso una chiamata ad
 \func{exec}, a meno che non lo si sia creato con il flag di
 \const{SFD\_CLOEXEC} o si sia successivamente impostato il
@@ -2221,7 +2221,7 @@ successivo con \func{fcntl}.
 
 \begin{figure}[!htb]
   \footnotesize \centering
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{0.90\textwidth}
+  \begin{minipage}[c]{0.95\textwidth}
     \includestruct{listati/signalfd_siginfo.h}
   \end{minipage} 
   \normalsize 
     \includestruct{listati/signalfd_siginfo.h}
   \end{minipage} 
   \normalsize 
@@ -2251,8 +2251,8 @@ ad eventuali più segnali pendenti, fino al numero massimo di strutture
   \label{fig:fiforeporter_code_init}
 \end{figure}
 
   \label{fig:fiforeporter_code_init}
 \end{figure}
 
-Il contenuto di \struct{signalfd\_siginfo} ricalca da vicino quella della
-analoga struttura \struct{siginfo\_t} (illustrata in
+Il contenuto di \struct{signalfd\_siginfo} ricalca da vicino quella
+dell'analoga struttura \struct{siginfo\_t} (illustrata in
 fig.~\ref{fig:sig_siginfo_t}) usata dall'interfaccia ordinaria dei segnali, e
 restituisce dati simili. Come per \struct{siginfo\_t} i campi che vengono
 avvalorati dipendono dal tipo di segnale e ricalcano i valori che abbiamo già
 fig.~\ref{fig:sig_siginfo_t}) usata dall'interfaccia ordinaria dei segnali, e
 restituisce dati simili. Come per \struct{siginfo\_t} i campi che vengono
 avvalorati dipendono dal tipo di segnale e ricalcano i valori che abbiamo già
@@ -2435,7 +2435,7 @@ abbiamo già illustrato in sez.~\ref{sec:sig_timer_adv}.\footnote{questa
   interfaccia è stata introdotta in forma considerata difettosa con il kernel
   2.6.22, per cui è stata immediatamente tolta nel successivo 2.6.23 e
   reintrodotta in una forma considerata adeguata nel kernel 2.6.25, il
   interfaccia è stata introdotta in forma considerata difettosa con il kernel
   2.6.22, per cui è stata immediatamente tolta nel successivo 2.6.23 e
   reintrodotta in una forma considerata adeguata nel kernel 2.6.25, il
-  supporto nelle \acr{glibc} è stato introdotto a partire dalla versione
+  supporto nella \acr{glibc} è stato introdotto a partire dalla versione
   2.8.6, la versione del kernel 2.6.22, presente solo su questo kernel, non è
   supportata e non deve essere usata.} La prima funzione di sistema prevista,
 quella che consente di creare un timer, è \funcd{timerfd\_create}, il cui
   2.8.6, la versione del kernel 2.6.22, presente solo su questo kernel, non è
   supportata e non deve essere usata.} La prima funzione di sistema prevista,
 quella che consente di creare un timer, è \funcd{timerfd\_create}, il cui
@@ -3507,7 +3507,7 @@ normalmente.
 In generale questa interfaccia è completamente astratta e può essere
 implementata sia direttamente nel kernel che in \textit{user space} attraverso
 l'uso di \textit{thread}. Per le versioni del kernel meno recenti esiste una
 In generale questa interfaccia è completamente astratta e può essere
 implementata sia direttamente nel kernel che in \textit{user space} attraverso
 l'uso di \textit{thread}. Per le versioni del kernel meno recenti esiste una
-implementazione di questa interfaccia fornita completamente delle \acr{glibc}
+implementazione di questa interfaccia fornita completamente dalla \acr{glibc}
 a partire dalla versione 2.1, che è realizzata completamente in \textit{user
   space}, ed è accessibile linkando i programmi con la libreria
 \file{librt}. A partire dalla versione 2.5.32 è stato introdotto nel kernel
 a partire dalla versione 2.1, che è realizzata completamente in \textit{user
   space}, ed è accessibile linkando i programmi con la libreria
 \file{librt}. A partire dalla versione 2.5.32 è stato introdotto nel kernel
@@ -3560,8 +3560,8 @@ chiamata una serie di operazioni, usando un vettore di \textit{control
 esse.
 
 Infine il campo \var{aio\_sigevent} è una struttura di tipo \struct{sigevent}
 esse.
 
 Infine il campo \var{aio\_sigevent} è una struttura di tipo \struct{sigevent}
-(illustrata in in fig.~\ref{fig:struct_sigevent}) che serve a specificare il
-modo in cui si vuole che venga effettuata la notifica del completamento delle
+(illustrata in fig.~\ref{fig:struct_sigevent}) che serve a specificare il modo
+in cui si vuole che venga effettuata la notifica del completamento delle
 operazioni richieste; per la trattazione delle modalità di utilizzo della
 stessa si veda quanto già visto in proposito in sez.~\ref{sec:sig_timer_adv}.
 
 operazioni richieste; per la trattazione delle modalità di utilizzo della
 stessa si veda quanto già visto in proposito in sez.~\ref{sec:sig_timer_adv}.
 
@@ -3862,6 +3862,12 @@ per il campo \var{aio\_sigevent} di \struct{aiocb}.
 % http://bert-hubert.blogspot.de/2012/05/on-linux-asynchronous-file-io.html 
 % https://www.fsl.cs.sunysb.edu/~vass/linux-aio.txt
 
 % http://bert-hubert.blogspot.de/2012/05/on-linux-asynchronous-file-io.html 
 % https://www.fsl.cs.sunysb.edu/~vass/linux-aio.txt
 
+% TODO trattare la poll API basata sull'I/O asicrono, introdotta con il kernel
+% 4.18, vedi  https://lwn.net/Articles/743714/,
+% https://lwn.net/Articles/742978/, https://lwn.net/Articles/758324/
+% http://git.infradead.org/users/hch/vfs.git/commit/d2d9e26c7cb6d95d521153897910080cf56c7fad
+% Reverted
+
 
 \section{Altre modalità di I/O avanzato}
 \label{sec:file_advanced_io}
 
 \section{Altre modalità di I/O avanzato}
 \label{sec:file_advanced_io}
@@ -4080,10 +4086,11 @@ file.
                              con \const{MAP\_PRIVATE}.\\ 
     \const{MAP\_STACK}     & Al momento è ignorato, è stato fornito (dal kernel
                              2.6.27) a supporto della implementazione dei
                              con \const{MAP\_PRIVATE}.\\ 
     \const{MAP\_STACK}     & Al momento è ignorato, è stato fornito (dal kernel
                              2.6.27) a supporto della implementazione dei
-                             thread nelle \acr{glibc}, per allocare memoria in
-                             uno spazio utilizzabile come \textit{stack} per le
-                             architetture hardware che richiedono un
-                             trattamento speciale di quest'ultimo.\\
+                             \textit{thread} nella \acr{glibc}, per allocare
+                             memoria in uno spazio utilizzabile come
+                             \textit{stack} per le architetture hardware che
+                             richiedono un trattamento speciale di
+                             quest'ultimo.\\ 
     \constd{MAP\_UNINITIALIZED}& Specifico per i sistemi embedded ed
                              utilizzabile dal kernel 2.6.33 solo se è stata
                              abilitata in fase di compilazione dello stesso
     \constd{MAP\_UNINITIALIZED}& Specifico per i sistemi embedded ed
                              utilizzabile dal kernel 2.6.33 solo se è stata
                              abilitata in fase di compilazione dello stesso
@@ -4113,6 +4120,11 @@ file.
 % TODO trattare  MAP_FIXED_NOREPLACE vedi https://lwn.net/Articles/751651/ e
 % https://lwn.net/Articles/741369/ 
 
 % TODO trattare  MAP_FIXED_NOREPLACE vedi https://lwn.net/Articles/751651/ e
 % https://lwn.net/Articles/741369/ 
 
+% TODO: verificare MAP_SYNC e MAP_SHARED_VALIDATE, vedi
+% https://lwn.net/Articles/731706/, https://lwn.net/Articles/758594/ incluse
+% con il 4.15
+
+
 L'argomento \param{flags} specifica infine qual è il tipo di oggetto mappato,
 le opzioni relative alle modalità con cui è effettuata la mappatura e alle
 modalità con cui le modifiche alla memoria mappata vengono condivise o
 L'argomento \param{flags} specifica infine qual è il tipo di oggetto mappato,
 le opzioni relative alle modalità con cui è effettuata la mappatura e alle
 modalità con cui le modifiche alla memoria mappata vengono condivise o
@@ -4765,7 +4777,7 @@ funzione, su Linux un valore nullo di \param{len} è consentito.
 L'argomento \param{advice} invece può assumere solo i valori indicati in
 tab.~\ref{tab:posix_madvise_advice_values}, che riflettono gli analoghi di
 \func{madvise}, con lo stesso effetto per tutti tranne
 L'argomento \param{advice} invece può assumere solo i valori indicati in
 tab.~\ref{tab:posix_madvise_advice_values}, che riflettono gli analoghi di
 \func{madvise}, con lo stesso effetto per tutti tranne
-\const{POSIX\_MADV\_DONTNEED}.  Infatti a partire dalle \acr{glibc} 2.6
+\const{POSIX\_MADV\_DONTNEED}.  Infatti a partire dalla \acr{glibc} 2.6
 \const{POSIX\_MADV\_DONTNEED} viene ignorato, in quanto l'uso del
 corrispondente \const{MADV\_DONTNEED} di \func{madvise} ha, per la semantica
 imperativa, l'effetto immediato di far liberare le pagine da parte del kernel,
 \const{POSIX\_MADV\_DONTNEED} viene ignorato, in quanto l'uso del
 corrispondente \const{MADV\_DONTNEED} di \func{madvise} ha, per la semantica
 imperativa, l'effetto immediato di far liberare le pagine da parte del kernel,
@@ -4850,11 +4862,11 @@ stesso valore deve essere ottenibile in esecuzione tramite la funzione
 \func{sysconf} richiedendo l'argomento \const{\_SC\_IOV\_MAX} (vedi
 sez.~\ref{sec:sys_limits}).
 
 \func{sysconf} richiedendo l'argomento \const{\_SC\_IOV\_MAX} (vedi
 sez.~\ref{sec:sys_limits}).
 
-Nel caso di Linux il limite di sistema è di 1024, però se si usano le
-\acr{glibc} queste forniscono un \textit{wrapper} per le \textit{system call}
+Nel caso di Linux il limite di sistema è di 1024, però se si usa la
+\acr{glibc} essa fornisce un \textit{wrapper} per le \textit{system call}
 che si accorge se una operazione supererà il precedente limite, in tal caso i
 dati verranno letti o scritti con le usuali \func{read} e \func{write} usando
 che si accorge se una operazione supererà il precedente limite, in tal caso i
 dati verranno letti o scritti con le usuali \func{read} e \func{write} usando
-un buffer di dimensioni sufficienti appositamente allocato e sufficiente a
+un buffer di dimensioni sufficienti appositamente allocato in grado di
 contenere tutti i dati indicati da \param{vector}. L'operazione avrà successo
 ma si perderà l'atomicità del trasferimento da e verso la destinazione finale.
 
 contenere tutti i dati indicati da \param{vector}. L'operazione avrà successo
 ma si perderà l'atomicità del trasferimento da e verso la destinazione finale.
 
@@ -4912,7 +4924,9 @@ descriptor (si ricordi quanto visto in sez.~\ref{sec:file_adv_func}) con delle
 chiamate a \func{lseek}.
 
 % TODO trattare preadv2() e pwritev2(), introdotte con il kernel 4.6, vedi
 chiamate a \func{lseek}.
 
 % TODO trattare preadv2() e pwritev2(), introdotte con il kernel 4.6, vedi
-% http://lwn.net/Articles/670231/ ed il flag RWF_HIPRI
+% http://lwn.net/Articles/670231/ ed il flag RWF_HIPRI, anche l'aggiunta del
+% flag RWF_APPEND a pwritev2 con il kernel 4.16, vedi
+% https://lwn.net/Articles/746129/ 
 
 
 \subsection{L'I/O diretto fra file descriptor: \func{sendfile} e
 
 
 \subsection{L'I/O diretto fra file descriptor: \func{sendfile} e
@@ -4934,7 +4948,7 @@ permettono di ottimizzare le prestazioni in questo tipo di situazioni.
 
 La prima funzione che è stata ideata per ottimizzare il trasferimento dei dati
 fra due file descriptor è \func{sendfile}.\footnote{la funzione è stata
 
 La prima funzione che è stata ideata per ottimizzare il trasferimento dei dati
 fra due file descriptor è \func{sendfile}.\footnote{la funzione è stata
-  introdotta con i kernel della serie 2.2, e disponibile dalle \acr{glibc}
+  introdotta con i kernel della serie 2.2, e disponibile dalla \acr{glibc}
   2.1.} La funzione è presente in diverse versioni di Unix (la si ritrova ad
 esempio in FreeBSD, HPUX ed altri Unix) ma non è presente né in POSIX.1-2001
 né in altri standard (pertanto si eviti di utilizzarla se si devono scrivere
   2.1.} La funzione è presente in diverse versioni di Unix (la si ritrova ad
 esempio in FreeBSD, HPUX ed altri Unix) ma non è presente né in POSIX.1-2001
 né in altri standard (pertanto si eviti di utilizzarla se si devono scrivere
@@ -5688,7 +5702,7 @@ dei buchi.\footnote{si ricordi che occorre scrivere per avere l'allocazione e
   che l'uso di \func{truncate} per estendere un file creerebbe soltanto uno
   \textit{sparse file} (vedi sez.~\ref{sec:file_lseek}) senza una effettiva
   allocazione dello spazio disco.}  In realtà questa è la modalità con cui la
   che l'uso di \func{truncate} per estendere un file creerebbe soltanto uno
   \textit{sparse file} (vedi sez.~\ref{sec:file_lseek}) senza una effettiva
   allocazione dello spazio disco.}  In realtà questa è la modalità con cui la
-funzione veniva realizzata nella prima versione fornita dalle \acr{glibc}, per
+funzione veniva realizzata nella prima versione fornita dalla \acr{glibc}, per
 cui la funzione costituiva in sostanza soltanto una standardizzazione delle
 modalità di esecuzione di questo tipo di allocazioni.
 
 cui la funzione costituiva in sostanza soltanto una standardizzazione delle
 modalità di esecuzione di questo tipo di allocazioni.
 
@@ -5705,7 +5719,7 @@ solo a partire dal kernel 2.6.23 in cui è stata introdotta la nuova
   stato introdotto solo a partire dal kernel 2.6.25.}  che consente di
 realizzare direttamente all'interno del kernel l'allocazione dello spazio
 disco così da poter realizzare una versione di \func{posix\_fallocate} con
   stato introdotto solo a partire dal kernel 2.6.25.}  che consente di
 realizzare direttamente all'interno del kernel l'allocazione dello spazio
 disco così da poter realizzare una versione di \func{posix\_fallocate} con
-prestazioni molto più elevate; nelle \acr{glibc} la nuova \textit{system call}
+prestazioni molto più elevate; nella \acr{glibc} la nuova \textit{system call}
 viene sfruttata per la realizzazione di \func{posix\_fallocate} a partire
 dalla versione 2.10.
 
 viene sfruttata per la realizzazione di \func{posix\_fallocate} a partire
 dalla versione 2.10.
 
@@ -5714,7 +5728,7 @@ esclusivamente su Linux, inizialmente \funcd{fallocate} non era stata definita
 come funzione di libreria,\footnote{pertanto poteva essere invocata soltanto
   in maniera indiretta con l'ausilio di \func{syscall}, vedi
   sez.~\ref{sec:proc_syscall}, come \code{long fallocate(int fd, int mode,
 come funzione di libreria,\footnote{pertanto poteva essere invocata soltanto
   in maniera indiretta con l'ausilio di \func{syscall}, vedi
   sez.~\ref{sec:proc_syscall}, come \code{long fallocate(int fd, int mode,
-      loff\_t offset, loff\_t len)}.} ma a partire dalle \acr{glibc} 2.10 è
+      loff\_t offset, loff\_t len)}.} ma a partire dalla \acr{glibc} 2.10 è
   stato fornito un supporto esplicito; il suo prototipo è:
 
 \begin{funcproto}{
   stato fornito un supporto esplicito; il suo prototipo è:
 
 \begin{funcproto}{
@@ -5806,7 +5820,8 @@ file uno \textit{sparse file} a posteriori.
 
 
 % TODO non so dove trattarli, ma dal 2.6.39 ci sono i file handle, vedi
 
 
 % TODO non so dove trattarli, ma dal 2.6.39 ci sono i file handle, vedi
-% http://lwn.net/Articles/432757/ 
+% http://lwn.net/Articles/432757/ (probabilmente da associare alle
+% at-functions) 
 
 
 % LocalWords:  dell'I locking multiplexing cap sez system call socket BSD GID
 
 
 % LocalWords:  dell'I locking multiplexing cap sez system call socket BSD GID