\section{L'\textit{I/O multiplexing}}
\label{sec:file_multiplexing}
+
Uno dei problemi che si presentano quando si deve operare contemporaneamente
su molti file usando le funzioni illustrate in
cap.~\ref{cha:file_unix_interface} e cap.~\ref{cha:files_std_interface} è che
che questo fosse un puntatore valido, anche se poi veniva ignorato, a
partire dal 2.6.9 si può specificare anche un valore \texttt{NULL}.}
-
-
\begin{figure}[!htb]
\footnotesize \centering
\begin{minipage}[c]{15cm}
impostare quali eventi osservare, che in uscita (nei risultati ottenuti con
\func{epoll\_wait}) per ricevere le notifiche degli eventi avvenuti. La sua
definizione è riportata in fig.~\ref{fig:epoll_event}.
-
+«
Il primo campo, \var{events}, è una maschera binaria in cui ciascun bit
corrisponde o ad un tipo di evento, o una modalità di notifica; detto campo
deve essere specificato come OR aritmetico delle costanti riportate in
sola modalità possibile, ad esempio la condizione può essere riconosciuta
anche con il fatto che sono stati restituiti meno dati di quelli richiesti.
-Come le precedenti \func{select} e \func{poll}, le funzioni dell'interfaccia
-di \textit{epoll} vengono utilizzate prevalentemente con i server di rete,
-quando si devono tenere sotto osservazione un gran numero di socket; per
-questo motivo rimandiamo di nuovo la trattazione di un esempio concreto a
-quando avremo esaminato in dettaglio le caratteristiche dei socket, in
-particolare si potrà trovare un programma che utilizza questa interfaccia in
-sez.~\ref{sec:TCP_sock_multiplexing}.
+Come già per \func{select} e \func{poll} anche per l'interfaccia di
+\textit{epoll} si pone il problema di gestire l'attesa di segnali e di dati
+contemponeamente, per far questo di nuovo è necessaria una variante della
+funzione di attesa che consenta di reimpostare all'uscita una maschera di
+segnali, analoga alle precedenti estensioni \func{pselect} e \func{ppoll}; in
+questo caso la funzione si chiama \funcd{epoll\_pwait} ed il suo prototipo è:
+\begin{prototype}{sys/epoll.h}
+ {int epoll\_pwait(int epfd, struct epoll\_event * events, int maxevents,
+ int timeout, const sigset_t *sigmask)}
-\itindend{epoll}
+ Attende che uno dei file descriptor osservati sia pronto, mascherando i
+ segnali.
+ \bodydesc{La funzione restituisce il numero di file descriptor pronti in
+ caso di successo o $-1$ in caso di errore, nel qual caso \var{errno}
+ assumerà uno dei valori già visti con \funcd{epoll\_wait}.
+}
+\end{prototype}
+
+La funzione è del tutto analoga \funcd{epoll\_wait}, soltanto che alla sua
+uscita viene ripristinata la maschera di segnali impostata con
+l'argomento \param{sigmask}, in sostanza la chiamata a questa funzione è
+equivalente al seguente codice, eseguito però in maniera atomica:
+\includecodesnip{listati/epoll_pwait_means.c}
+
+Si tenga presente che come le precedenti funzioni di \textit{I/O multiplexing}
+anche le funzioni dell'interfaccia di \textit{epoll} vengono utilizzate
+prevalentemente con i server di rete, quando si devono tenere sotto
+osservazione un gran numero di socket; per questo motivo rimandiamo di nuovo
+la trattazione di un esempio concreto a quando avremo esaminato in dettaglio
+le caratteristiche dei socket, in particolare si potrà trovare un programma
+che utilizza questa interfaccia in sez.~\ref{sec:TCP_sock_multiplexing}.
+
+\itindend{epoll}
\section{L'accesso \textsl{asincrono} ai file}
% inserite nel kernel 2.6.30, vedi http://lwn.net/Articles/326818/
-\subsection{L'I/O diretto fra file descriptor: \func{sendfile} e \func{splice}}
+\subsection{L'I/O diretto fra file descriptor: \func{sendfile} e
+ \func{splice}}
\label{sec:file_sendfile_splice}
Uno dei problemi che si presentano nella gestione dell'I/O è quello in cui si