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}
+questo caso la funzione si chiama \funcd{epoll\_pwait}\footnote{introdotta a
+ partire dal kernel 2.6.19.} 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)}
+ int timeout, const sigset\_t *sigmask)}
Attende che uno dei file descriptor osservati sia pronto, mascherando i
segnali.
\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:
+uscita viene ripristinata la maschera di segnali originale, sostituita durante
+l'esecuzione da quella 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}
specifico di Linux e BSD.} aprire un file in modalità asincrona, così come è
possibile attivare in un secondo tempo questa modalità impostando questo flag
attraverso l'uso di \func{fcntl} con il comando \const{F\_SETFL} (vedi
-sez.~\ref{sec:file_fcntl}).
-
-In realtà parlare di apertura in modalità asincrona non significa che le
-operazioni di lettura o scrittura del file vengono eseguite in modo asincrono
-(tratteremo questo, che è ciò che più propriamente viene chiamato \textsl{I/O
- asincrono}, in sez.~\ref{sec:file_asyncronous_io}), quanto dell'attivazione
-un meccanismo di notifica asincrona delle variazione dello stato del file
-descriptor aperto in questo modo. Quello che succede in questo caso è che il
-sistema genera un segnale (normalmente \const{SIGIO}, ma è possibile usarne
-altri con il comando \const{F\_SETSIG} di \func{fcntl}) tutte le volte che
-diventa possibile leggere o scrivere dal file descriptor che si è posto in
-questa modalità.\footnote{questa modalità non è utilizzabile con i file
- ordinari ma solo con socket, file di terminale o pseudo terminale, e, a
- partire dal kernel 2.6, anche per fifo e pipe.}
-
-Si può inoltre selezionare, con il comando \const{F\_SETOWN} di \func{fcntl},
-quale processo (o gruppo di processi) riceverà il segnale. Se pertanto si
-effettuano le operazioni di I/O in risposta alla ricezione del segnale non ci
-sarà più la necessità di restare bloccati in attesa della disponibilità di
-accesso ai file.
+sez.~\ref{sec:file_fcntl}). In realtà parlare di apertura in modalità
+asincrona non significa che le operazioni di lettura o scrittura del file
+vengono eseguite in modo asincrono (tratteremo questo, che è ciò che più
+propriamente viene chiamato \textsl{I/O asincrono}, in
+sez.~\ref{sec:file_asyncronous_io}), quanto dell'attivazione un meccanismo di
+notifica asincrona delle variazione dello stato del file descriptor aperto in
+questo modo.
+
+Quello che succede è che per tutti i file posti in questa modalità\footnote{si
+ tenga presente però che essa non è utilizzabile con i file ordinari ma solo
+ con socket, file di terminale o pseudo terminale, ed anche, a partire dal
+ kernel 2.6, anche per fifo e pipe.} il sistema genera un apposito segnale,
+\const{SIGIO}, tutte le volte che diventa possibile leggere o scrivere dal
+file descriptor che si è posto in questa modalità. Inoltre è possibile, come
+illustrato in sez.~\ref{sec:file_fcntl}, selezionare con il comando
+\const{F\_SETOWN} di \func{fcntl} quale processo o quale gruppo di processi
+dovrà ricevere il segnale. In questo modo diventa possibile effettuare le
+operazioni di I/O in risposta alla ricezione del segnale, e non ci sarà più la
+necessità di restare bloccati in attesa della disponibilità di accesso ai
+file.
+
+% TODO: per i thread l'uso di F_SETOWN ha un significato diverso
Per questo motivo Stevens, ed anche le pagine di manuale di Linux, chiamano
questa modalità ``\textit{Signal driven I/O}''. Si tratta di un'altra
di scrittura (\textit{write lease}). Nel primo caso la notifica avviene quando
un altro processo esegue l'apertura del file in scrittura o usa
\func{truncate} per troncarlo. Nel secondo caso la notifica avviene anche se
-il file viene aperto il lettura; in quest'ultimo caso però il \textit{lease}
+il file viene aperto in lettura; in quest'ultimo caso però il \textit{lease}
può essere ottenuto solo se nessun altro processo ha aperto lo stesso file.
Come accennato in sez.~\ref{sec:file_fcntl} il comando di \func{fcntl} che