al tempo restante; questo è utile quando la funzione viene interrotta da un
segnale, in tal caso infatti si ha un errore di \macro{EINTR}, ed occorre
rilanciare la funzione; in questo modo non è necessario ricalcolare tutte le
-volte il tempo rimanente.\footnote{questo però può causare problemi di
- portabilità sia quando si trasporta codice scritto su Linux che legge questo
- valore, sia quando si usano programmi scritti per altri sistemi che non
- dispongono di questa caratteristica e ricalcolano \param{timeout} tutte le
- volte. In genere la caratteristica è disponibile nei sistemi che derivano da
- System V e non disponibile per quelli che derivano da BSD.}
+volte il tempo rimanente.\footnote{questo può causare problemi di portabilità
+ sia quando si trasporta codice scritto su Linux che legge questo valore, sia
+ quando si usano programmi scritti per altri sistemi che non dispongono di
+ questa caratteristica e ricalcolano \param{timeout} tutte le volte. In
+ genere la caratteristica è disponibile nei sistemi che derivano da System V
+ e non disponibile per quelli che derivano da BSD.}
Come accennato l'interfaccia di \func{select} è una estensione di BSD; anche
System V ha introdotto una sua interfaccia per gestire l'\textit{I/O
sistema mantiene una coda per \macro{SIGIO}, in modo che arrivi un segnale per
ogni file attivo.
-
Benché la modalità di apertura asincrona di un file possa risultare utile in
varie occasioni (in particolar modo con i socket e gli altri file per i quali
le funzioni di I/O sono system call lente), essa è comunque limitata alla
normalmente.
In generale questa interfaccia è completamente astratta e può essere
-implementata sia direttamente nel kernel, che attraverso l'uso di thread. Al
-momento\footnote{fino ai kernel della serie 2.4.x sono presenti solo le due
- alternative citate, nella serie 2.5.x è però iniziato un lavoro completo di
- riscrittura di tutto il sistema di I/O, che prevede anche l'introduzione di
- un nuovo layer per l'I/O asincrono.} sono disponibili due implementazioni,
-una in user space, che è integrata nelle \acr{glibc}, ed una ibrida, che si
-appoggia ad una estensione del kernel (il cosiddetto KAIO, non incluso nella
-versione ufficiale) prodotta da SGI. Quest'ultima ha funzionalità più limitate
-ma prestazioni nettamente superiori.
-
-Alle funzioni definite essa si può accedere includendo \file{unistd.h} e
-definendo la macro \macro{\_POSIX\_ASYNCHRONOUS\_IO}, mentre alla
-implementazione di KAIO si accede includendo \file{linux/aio.h}; ambedue però
-usano la stessa interfaccia di programmazione.
+implementata sia direttamente nel kernel, che in user space attraverso l'uso
+di thread. Al momento\footnote{fino ai kernel della serie 2.4.x, nella serie
+ 2.5.x è però iniziato un lavoro completo di riscrittura di tutto il sistema
+ di I/O, che prevede anche l'introduzione di un nuovo layer per l'I/O
+ asincrono.} esiste una sola versione stabile, quella delle \acr{glibc}, che
+è realizzata completamente in user space; esistono comunque vari progetti
+(come il KAIO della SGI, o i patch di Benjamin La Haise) che prevedono un
+supporto diretto all'interno del kernel.