+Per superare il problema di dover usare il \textit{polling} controllare la
+disponibilità di accesso ad un file aperto in modalità non bloccante, sia BSD
+che SysV hanno introdotto delle nuove funzioni in grado di sospendere
+l'esecuzione di un processo fino a che l'accesso diventi possibile; il primo
+ad introdurre questa nuova interfaccia, chiamata usualmente \textit{I/O
+ multiplexing}, è stato BSD, con l'introduzione della funzione \func{select},
+il cui prototipo è:
+\begin{prototype}{sys/select.h}
+ {int select(int n, fd\_set *readfds, fd\_set *writefds, fd\_set *exceptfds,
+ struct timeval *timeout)}
+
+Attende che un certo insieme di file descriptor cambi stato.
+
+\bodydesc{La funzione restituisce il numero di file descriptor, anche nullo,
+ che hanno cambiato stato in caso di successo e -1 in caso di errore, nel
+ qual caso \var{errno} viene settata ai valori:
+ \begin{errlist}
+ \item[\macro{EBADF}] Si è specificato un file descriptor sbagliato in uno
+ degeli insiemi.
+ \item[\macro{EINTR}] La funzione è stata interrotta da un segnale.
+ \item[\macro{EINVAL}] Si è specificato per \param{n} un valore negativo.
+ \end{errlist}
+ ed inoltre \macro{ENOMEM}.
+}
+\end{prototype}
+
+La funzione mette il processo in stato di \textit{sleep} (vedi
+\ref{tab:proc_proc_states})
+
+
+
+il cui prototipo è:
+\begin{prototype}{sys/poll.h}
+ {int poll(struct pollfd *ufds, unsigned int nfds, int timeout)}
+
+La funzione attente un cambiamento di stato per uno dei file descriptor
+specificati da \param{ufds}.
+
+\bodydesc{La funzione restituisce il numero di file descriptor con attività in
+ caso di successo, o 0 se c'è stato un timeout; in caso di errore viene
+ restituito -1 ed \var{errno} viene .}
+\end{prototype}
+
+