descriptor (anche nullo) che sono attivi, e -1 in caso di errore, nel qual
caso \var{errno} assumerà uno dei valori:
\begin{errlist}
- \item[\errcode{EBADF}] Si è specificato un file descriptor sbagliato in uno
+ \item[\errcode{EBADF}] si è specificato un file descriptor sbagliato in uno
degli insiemi.
- \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale.
- \item[\errcode{EINVAL}] Si è specificato per \param{ndfs} un valore negativo
+ \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale.
+ \item[\errcode{EINVAL}] si è specificato per \param{ndfs} un valore negativo
o un valore non valido per \param{timeout}.
\end{errlist}
ed inoltre \errval{ENOMEM}.
descriptor (anche nullo) che sono attivi, e -1 in caso di errore, nel qual
caso \var{errno} assumerà uno dei valori:
\begin{errlist}
- \item[\errcode{EBADF}] Si è specificato un file descriptor sbagliato in uno
+ \item[\errcode{EBADF}] si è specificato un file descriptor sbagliato in uno
degli insiemi.
- \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale.
- \item[\errcode{EINVAL}] Si è specificato per \param{ndfs} un valore negativo
+ \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale.
+ \item[\errcode{EINVAL}] si è specificato per \param{ndfs} un valore negativo
o un valore non valido per \param{timeout}.
\end{errlist}
ed inoltre \errval{ENOMEM}.}
in caso di successo, o 0 se c'è stato un timeout e -1 in caso di errore,
ed in quest'ultimo caso \var{errno} assumerà uno dei valori:
\begin{errlist}
- \item[\errcode{EBADF}] Si è specificato un file descriptor sbagliato in uno
+ \item[\errcode{EBADF}] si è specificato un file descriptor sbagliato in uno
degli insiemi.
- \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale.
- \item[\errcode{EINVAL}] Il valore di \param{nfds} eccede il limite
+ \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale.
+ \item[\errcode{EINVAL}] il valore di \param{nfds} eccede il limite
\macro{RLIMIT\_NOFILE}.
\end{errlist}
ed inoltre \errval{EFAULT} e \errval{ENOMEM}.}
in caso di successo, o 0 se c'è stato un timeout e -1 in caso di errore,
ed in quest'ultimo caso \var{errno} assumerà uno dei valori:
\begin{errlist}
- \item[\errcode{EBADF}] Si è specificato un file descriptor sbagliato in uno
+ \item[\errcode{EBADF}] si è specificato un file descriptor sbagliato in uno
degli insiemi.
- \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale.
- \item[\errcode{EINVAL}] Il valore di \param{nfds} eccede il limite
+ \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale.
+ \item[\errcode{EINVAL}] il valore di \param{nfds} eccede il limite
\macro{RLIMIT\_NOFILE}.
\end{errlist}
ed inoltre \errval{EFAULT} e \errval{ENOMEM}.}
(analogo di \const{POLLIN}).\\
\const{EPOLLOUT} & Il file è pronto per le operazioni di scrittura
(analogo di \const{POLLOUT}).\\
- \const{EPOLLRDHUP} & l'altro capo di un socket di tipo
+ \const{EPOLLRDHUP} & L'altro capo di un socket di tipo
\const{SOCK\_STREAM} (vedi sez.~\ref{sec:sock_type})
ha chiuso la connessione o il capo in scrittura
della stessa (vedi sez.~\ref{sec:TCP_shutdown}).\\
(operazione che può essere molto onerosa quando una directory contiene un gran
numero di file). Infine l'uso dei segnali come interfaccia di notifica
comporta tutti i problemi di gestione visti in sez.~\ref{sec:sig_management} e
-sez.~\ref{sec:sig_control}. Per tutta questa serie di motivi in generale
+sez.~\ref{sec:sig_adv_control}. Per tutta questa serie di motivi in generale
quella di \textit{dnotify} viene considerata una interfaccia di usabilità
problematica.
\index{file!inotify|)}
-% TODO inserire anche eventfd (vedi http://lwn.net/Articles/233462/)
-% e le restanti signalfd e timerfd introdotte con il 2.6.22
-% o trovargli un posto migliore
-
-
\subsection{L'interfaccia POSIX per l'I/O asincrono}
\label{sec:file_asyncronous_io}
il loro accesso ai dati dei file e controllare la gestione del relativo
\textit{caching}.
+Una prima funzione che può essere utilizzata per modificare la gestione
+ordinaria dell'I/O su file è \funcd{readahead}, che consente di richiedere la
+lettura del contenuto di un file sulla cache, così che le seguenti operazioni
+di lettura non debbano bloccarsi nell'I/O su disco, il suo prototipo è:
+\begin{functions}
+ \headdecl{fcntl.h}
+
+ \funcdecl{ssize_t readahead(int fd, off64_t *offset, size_t count)}
+
+ Legge il contenuto di un file nella cache di memoria.
+
+ \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
+ errore, nel qual caso \var{errno} assumerà uno dei valori:
+ \begin{errlist}
+ \item[\errcode{EBADF}] .
+ \item[\errcode{EINVAL}] .
+ \end{errlist}
+ }
+\end{functions}
% TODO documentare \func{posix\_fadvise}
\bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
errore nel qual caso \var{errno} viene impostata ai valori:
\begin{errlist}
- \item[\errcode{EXDEV}] \param{oldpath} e \param{newpath} non sono sullo
- stesso filesystem.
+ \item[\errcode{EXDEV}] i file \param{oldpath} e \param{newpath} non sono
+ sullo stesso filesystem.
\item[\errcode{EPERM}] il filesystem che contiene \param{oldpath} e
\param{newpath} non supporta i link diretti o è una directory.
\item[\errcode{EEXIST}] un file (o una directory) con quel nome esiste di
\item[\errcode{EINVAL}] \param{newpath} contiene un prefisso di
\param{oldpath} o più in generale si è cercato di creare una directory come
sotto-directory di se stessa.
- \item[\errcode{ENOTDIR}] Uno dei componenti dei \itindex{pathname}
+ \item[\errcode{ENOTDIR}] uno dei componenti dei \itindex{pathname}
\textit{pathname} non è una directory o \param{oldpath} è una directory e
\param{newpath} esiste e non è una directory.
\end{errlist}
\bodydesc{La funzione restituisce zero in caso di successo e -1 per un
errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{EPERM}] Il filesystem non supporta la cancellazione di
+ \item[\errcode{EPERM}] il filesystem non supporta la cancellazione di
directory, oppure la directory che contiene \param{dirname} ha lo
\itindex{sticky~bit} \textit{sticky bit} impostato e l'user-ID effettivo
del processo non corrisponde al proprietario della directory.
- \item[\errcode{EACCES}] Non c'è il permesso di scrittura per la directory
+ \item[\errcode{EACCES}] non c'è il permesso di scrittura per la directory
che contiene la directory che si vuole cancellare, o non c'è il permesso
di attraversare (esecuzione) una delle directory specificate in
\param{dirname}.
- \item[\errcode{EBUSY}] La directory specificata è la directory di lavoro o la
+ \item[\errcode{EBUSY}] la directory specificata è la directory di lavoro o la
radice di qualche processo.
- \item[\errcode{ENOTEMPTY}] La directory non è vuota.
+ \item[\errcode{ENOTEMPTY}] la directory non è vuota.
\end{errlist}
ed inoltre anche \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT},
\errval{ENOTDIR}, \errval{ENOMEM}, \errval{ELOOP}, \errval{EROFS}.}
\bodydesc{La funzione restituisce zero in caso di successo e -1 per un
errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{EPERM}] Non si hanno privilegi sufficienti a creare l'inode, o
+ \item[\errcode{EPERM}] non si hanno privilegi sufficienti a creare l'inode, o
il filesystem su cui si è cercato di creare \param{pathname} non supporta
l'operazione.
- \item[\errcode{EINVAL}] Il valore di \param{mode} non indica un file, una
+ \item[\errcode{EINVAL}] il valore di \param{mode} non indica un file, una
fifo o un dispositivo.
\item[\errcode{EEXIST}] \param{pathname} esiste già o è un link simbolico.
\end{errlist}
\val{NULL} se fallisce, in quest'ultimo caso la variabile
\var{errno} è impostata con i seguenti codici di errore:
\begin{errlist}
- \item[\errcode{EINVAL}] L'argomento \param{size} è zero e \param{buffer} non
+ \item[\errcode{EINVAL}] l'argomento \param{size} è zero e \param{buffer} non
è nullo.
- \item[\errcode{ERANGE}] L'argomento \param{size} è più piccolo della
+ \item[\errcode{ERANGE}] l'argomento \param{size} è più piccolo della
lunghezza del \textit{pathname}.
- \item[\errcode{EACCES}] Manca il permesso di lettura o di ricerca su uno dei
+ \item[\errcode{EACCES}] manca il permesso di lettura o di ricerca su uno dei
componenti del \textit{pathname} (cioè su una delle directory superiori
alla corrente).
\end{errlist}}
\bodydesc{La funzione restituisce 0 in caso di successo e -1 per un errore,
nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{ENOTDIR}] Non si è specificata una directory.
- \item[\errcode{EACCES}] Manca il permesso di ricerca su uno dei componenti
+ \item[\errcode{ENOTDIR}] non si è specificata una directory.
+ \item[\errcode{EACCES}] manca il permesso di ricerca su uno dei componenti
di \param{path}.
\end{errlist}
ed inoltre \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT},
temporaneo in caso di successo e \val{NULL} in caso di errore, nel qual
caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale.
- \item[\errcode{EEXIST}] Non è stato possibile generare un nome univoco.
+ \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale.
+ \item[\errcode{EEXIST}] non è stato possibile generare un nome univoco.
\end{errlist}
ed inoltre \errval{EFAULT}, \errval{EMFILE}, \errval{ENFILE},
\errval{ENOSPC}, \errval{EROFS} e \errval{EACCES}.}
\item[\errcode{EACCES}] il file non ha permesso di scrittura o non si ha il
permesso di esecuzione una delle directory del \itindex{pathname}
\textit{pathname}.
- \item[\errcode{ETXTBSY}] Il file è un programma in esecuzione.
+ \item[\errcode{ETXTBSY}] il file è un programma in esecuzione.
\end{errlist}
ed anche \errval{ENOTDIR}, \errval{ENAMETOOLONG}, \errval{ENOENT},
\errval{EROFS}, \errval{EIO}, \errval{EFAULT}, \errval{ELOOP}.}
\bodydesc{Le funzioni restituiscono zero in caso di successo e -1 per
un errore, in caso di errore \var{errno} può assumere i valori:
\begin{errlist}
- \item[\errcode{EPERM}] L'user-ID effettivo non corrisponde a quello del
+ \item[\errcode{EPERM}] l'user-ID effettivo non corrisponde a quello del
proprietario del file o non è zero.
- \item[\errcode{EROFS}] Il file è su un filesystem in sola lettura.
+ \item[\errcode{EROFS}] il file è su un filesystem in sola lettura.
\end{errlist}
ed inoltre \errval{EIO}; \func{chmod} restituisce anche \errval{EFAULT},
\errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOMEM}, \errval{ENOTDIR},
\bodydesc{Le funzioni restituiscono zero in caso di successo e -1 per
un errore, in caso di errore \var{errno} può assumere i valori:
\begin{errlist}
- \item[\errcode{EPERM}] L'user-ID effettivo non corrisponde a quello del
+ \item[\errcode{EPERM}] l'user-ID effettivo non corrisponde a quello del
proprietario del file o non è zero, o utente e gruppo non sono validi
\end{errlist}
Oltre a questi entrambe restituiscono gli errori \errval{EROFS} e
\bodydesc{La funzione restituisce zero in caso di successo e -1 per
un errore, in caso di errore \var{errno} può assumere i valori:
\begin{errlist}
- \item[\errcode{EPERM}] L'user-ID effettivo del processo non è zero.
+ \item[\errcode{EPERM}] l'user-ID effettivo del processo non è zero.
\end{errlist}
ed inoltre \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT},
\errval{ENOMEM}, \errval{ENOTDIR}, \errval{EACCES}, \errval{ELOOP};
\begin{errlist}
\item[\errcode{EACCES}] si è richiesto \const{IPC\_STAT} ma i permessi non
consentono l'accesso in lettura al segmento.
- \item[\errcode{EINVAL}] O \param{shmid} non è un identificatore valido o
+ \item[\errcode{EINVAL}] o \param{shmid} non è un identificatore valido o
\param{cmd} non è un comando valido.
\item[\errcode{EIDRM}] l'argomento \param{shmid} fa riferimento ad un
segmento che è stato cancellato.
% \subsection{Gestione avanzata dell'allocazione della memoria}
% \label{sec:proc_mem_malloc_custom}
+
% TODO: trattare le funzionalità avanzate di \func{malloc}
% TODO: trattare \func{memalign}
+% TODO: trattare \func{valloc}
+% TODO: trattare \func{posix\_memalign}
sono compiute nello stesso spazio di indirizzi del processo. Per questo, anche
il solo accesso o l'assegnazione di una variabile possono non essere più
operazioni atomiche (torneremo su questi aspetti in
-sez.~\ref{sec:sig_control}).
+sez.~\ref{sec:sig_adv_control}).
In questo caso il sistema provvede un tipo di dato, il \type{sig\_atomic\_t},
il cui accesso è assicurato essere atomico. In pratica comunque si può
caso di successo, e -1 in caso di errore, nel qual caso \var{errno} assumerà
i valori:
\begin{errlist}
- \item[\errcode{ESRCH}] Il processo selezionato non esiste.
- \item[\errcode{EPERM}] In alcune implementazioni viene restituito quando il
+ \item[\errcode{ESRCH}] il processo selezionato non esiste.
+ \item[\errcode{EPERM}] in alcune implementazioni viene restituito quando il
processo selezionato non fa parte della stessa sessione del processo
corrente.
\end{errlist}
\bodydesc{La funzione ritorna il valore del nuovo \textit{process group}, e
-1 in caso di errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{ESRCH}] Il processo selezionato non esiste.
- \item[\errcode{EPERM}] Il cambiamento non è consentito.
- \item[\errcode{EACCES}] Il processo ha già eseguito una \func{exec}.
- \item[\errcode{EINVAL}] Il valore di \param{pgid} è negativo.
+ \item[\errcode{ESRCH}] il processo selezionato non esiste.
+ \item[\errcode{EPERM}] il cambiamento non è consentito.
+ \item[\errcode{EACCES}] il processo ha già eseguito una \func{exec}.
+ \item[\errcode{EINVAL}] il valore di \param{pgid} è negativo.
\end{errlist}
}
\end{prototype}
\bodydesc{La funzione restituisce 0 in caso di successo, e -1 in caso di
errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{ENOTTY}] Il file \param{fd} non corrisponde al terminale di
+ \item[\errcode{ENOTTY}] il file \param{fd} non corrisponde al terminale di
controllo del processo chiamante.
- \item[\errcode{ENOSYS}] Il sistema non supporta il job control.
- \item[\errcode{EPERM}] Il \textit{process group} specificato non è nella
+ \item[\errcode{ENOSYS}] il sistema non supporta il job control.
+ \item[\errcode{EPERM}] il \textit{process group} specificato non è nella
stessa sessione del processo chiamante.
\end{errlist}
ed inoltre \errval{EBADF} ed \errval{EINVAL}.
gruppo di \textit{foreground}, e -1 in caso di errore, nel qual caso
\var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{ENOTTY}] Non c'è un terminale di controllo o \param{fd} non
+ \item[\errcode{ENOTTY}] non c'è un terminale di controllo o \param{fd} non
corrisponde al terminale di controllo del processo chiamante.
\end{errlist}
ed inoltre \errval{EBADF} ed \errval{ENOSYS}.
\bodydesc{Entrambe le funzioni restituiscono 0 in caso di successo e -1 in
caso di errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{EINTR}] La funzione è stata interrotta.
+ \item[\errcode{EINTR}] la funzione è stata interrotta.
\end{errlist}
ed inoltre \errval{EBADF}, \errval{ENOTTY} ed \errval{EINVAL}.
}
\label{sec:sess_pty}
Qui vanno spiegati i terminali virtuali, \file{/dev/pty} e compagnia.
+% vedi man pts
-\subsection{La funzione \func{openpty}}
+
+\subsection{Allocazione dei terminale virtuali}
\label{sec:sess_openpty}
Qui vanno le cose su \func{openpty} e compagnia.
-
% TODO le ioctl dei terminali
+% TODO trattare \func{posix\_openpt}
+
+
% LocalWords: kernel multitasking dell'I job control BSD POSIX shell sez group
-\section{La gestione dei segnali}
+\section{La gestione di base dei segnali}
\label{sec:sig_management}
I segnali sono il primo e più classico esempio di eventi asincroni, cioè di
\bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
errore nel qual caso \var{errno} assumerà uno dei valori:
\begin{errlist}
- \item[\errcode{EINVAL}] Il segnale specificato non esiste.
- \item[\errcode{ESRCH}] Il processo selezionato non esiste.
- \item[\errcode{EPERM}] Non si hanno privilegi sufficienti ad inviare il
+ \item[\errcode{EINVAL}] il segnale specificato non esiste.
+ \item[\errcode{ESRCH}] il processo selezionato non esiste.
+ \item[\errcode{EPERM}] non si hanno privilegi sufficienti ad inviare il
segnale.
\end{errlist}}
\end{functions}
-\section{Gestione avanzata}
-\label{sec:sig_control}
+\section{La gestione avanzata dei segnali}
+\label{sec:sig_adv_control}
Le funzioni esaminate finora fanno riferimento alle modalità più elementari
della gestione dei segnali; non si sono pertanto ancora prese in
\bodydesc{La funzione restituisce zero in caso di successo e $-1$ per un
errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{EINVAL}] Si è specificato un numero di segnale invalido o si è
+ \item[\errcode{EINVAL}] si è specificato un numero di segnale invalido o si è
cercato di installare il gestore per \const{SIGKILL} o
\const{SIGSTOP}.
- \item[\errcode{EFAULT}] Si sono specificati indirizzi non validi.
+ \item[\errcode{EFAULT}] si sono specificati indirizzi non validi.
\end{errlist}}
\end{prototype}
\bodydesc{La funzione restituisce zero in caso di successo e $-1$ per un
errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{EINVAL}] Si è specificato un numero di segnale invalido.
- \item[\errcode{EFAULT}] Si sono specificati indirizzi non validi.
+ \item[\errcode{EINVAL}] si è specificato un numero di segnale invalido.
+ \item[\errcode{EFAULT}] si sono specificati indirizzi non validi.
\end{errlist}}
\end{prototype}
\bodydesc{La funzione restituisce zero in caso di successo e $-1$ per un
errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{EINVAL}] Si è specificato un numero di segnale invalido.
- \item[\errcode{EFAULT}] Si sono specificati indirizzi non validi.
+ \item[\errcode{EINVAL}] si è specificato un numero di segnale invalido.
+ \item[\errcode{EFAULT}] si sono specificati indirizzi non validi.
\end{errlist}}
\end{prototype}
errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{ENOMEM}] La dimensione specificata per il nuovo stack è minore
+ \item[\errcode{ENOMEM}] la dimensione specificata per il nuovo stack è minore
di \const{MINSIGSTKSZ}.
- \item[\errcode{EPERM}] Uno degli indirizzi non è valido.
- \item[\errcode{EFAULT}] Si è cercato di cambiare lo stack alternativo mentre
+ \item[\errcode{EPERM}] uno degli indirizzi non è valido.
+ \item[\errcode{EFAULT}] si è cercato di cambiare lo stack alternativo mentre
questo è attivo (cioè il processo è in esecuzione su di esso).
\item[\errcode{EINVAL}] \param{ss} non è nullo e \var{ss\_flags} contiene un
valore diverso da zero che non è \const{SS\_DISABLE}.
che si è rilevata una interruzione dovuta ad un segnale.
+\section{Funzionalità avanzate}
+\label{sec:sig_real_time}
+
+
+Tratteremo in questa ultima sezione alcune funzionalità avanzate relativa ai
+segnali ed in generale ai meccanismi di notifica, a partire dalla funzioni
+introdotte per la gestione dei cosiddetti ``\textsl{segnali real-time}'', alla
+gestione avanzata delle temporizzazioni e le nuove interfacce per la gestione
+di segnali ed eventi attraverso l'uso di filedescriptor.
+
\subsection{I segnali real-time}
\label{sec:sig_real_time}
\bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
errore, nel qual caso \var{errno} assumerà uno dei valori:
\begin{errlist}
- \item[\errcode{EAGAIN}] La coda è esaurita, ci sono già \const{SIGQUEUE\_MAX}
- segnali in attesa si consegna.
- \item[\errcode{EPERM}] Non si hanno privilegi appropriati per inviare il
+ \item[\errcode{EAGAIN}] la coda è esaurita, ci sono già
+ \const{SIGQUEUE\_MAX} segnali in attesa si consegna.
+ \item[\errcode{EPERM}] non si hanno privilegi appropriati per inviare il
segnale al processo specificato.
- \item[\errcode{ESRCH}] Il processo \param{pid} non esiste.
- \item[\errcode{EINVAL}] Si è specificato un valore non valido per
+ \item[\errcode{ESRCH}] il processo \param{pid} non esiste.
+ \item[\errcode{EINVAL}] si è specificato un valore non valido per
\param{signo}.
\end{errlist}
ed inoltre \errval{ENOMEM}.}
\bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
errore, nel qual caso \var{errno} assumerà uno dei valori:
\begin{errlist}
- \item[\errcode{EINTR}] La funzione è stata interrotta.
- \item[\errcode{EINVAL}] Si è specificato un valore non valido per
+ \item[\errcode{EINTR}] la funzione è stata interrotta.
+ \item[\errcode{EINVAL}] si è specificato un valore non valido per
\param{set}.
\end{errlist}
ed inoltre \errval{EFAULT}.}
errore, nel qual caso \var{errno} assumerà uno dei valori già visti per
\func{sigwait}, ai quali si aggiunge, per \func{sigtimedwait}:
\begin{errlist}
- \item[\errcode{EAGAIN}] Si è superato il timeout senza che un segnale atteso
+ \item[\errcode{EAGAIN}] si è superato il timeout senza che un segnale atteso
fosse emesso.
\end{errlist}
}
dedicato alla gestione, che potrebbe riceverlo fra due chiamate successive.
+\subsection{La gestione avanzata delle temporizzazioni}
+\label{sec:sig_timer_adv}
+
+
+
+
+\subsection{Le interfacce per la notifica attraverso i file descriptor}
+\label{sec:sig_signalfd_eventfd}
+
+
+% TODO trattare qui eventfd signalfd e timerfd introdotte con il 2.6.22
+% vedi: http://lwn.net/Articles/233462/
+% http://lwn.net/Articles/245533/
% LocalWords: kernel POSIX timer shell control ctrl kill raise signal handler
-1 in caso di fallimento, nel qual caso la variabile \var{errno} assumerà
i valori:
\begin{errlist}
- \item[\errcode{EPROTONOSUPPORT}] Il tipo di socket o il protocollo scelto non
- sono supportati nel dominio.
- \item[\errcode{ENFILE}] Il kernel non ha memoria sufficiente a creare una
+ \item[\errcode{EPROTONOSUPPORT}] il tipo di socket o il protocollo scelto
+ non sono supportati nel dominio.
+ \item[\errcode{ENFILE}] il kernel non ha memoria sufficiente a creare una
nuova struttura per il socket.
- \item[\errcode{EMFILE}] Si è ecceduta la tabella dei file.
- \item[\errcode{EACCES}] Non si hanno privilegi per creare un socket nel
+ \item[\errcode{EMFILE}] si è ecceduta la tabella dei file.
+ \item[\errcode{EACCES}] non si hanno privilegi per creare un socket nel
dominio o con il protocollo specificato.
- \item[\errcode{EINVAL}] Protocollo sconosciuto o dominio non disponibile.
- \item[\errcode{ENOBUFS}] Non c'è sufficiente memoria per creare il socket
+ \item[\errcode{EINVAL}] protocollo sconosciuto o dominio non disponibile.
+ \item[\errcode{ENOBUFS}] non c'è sufficiente memoria per creare il socket
(può essere anche \errval{ENOMEM}).
\end{errlist}
inoltre, a seconda del protocollo usato, potranno essere generati altri
\bodydesc{Le funzioni ritornano 0 in caso di successo e -1 in caso di
errore, nel qual caso \var{errno} assumerà uno dei valori:
\begin{errlist}
- \item[\errcode{EINVAL}] I valori per \param{resource} non sono validi.
- \item[\errcode{EPERM}] Un processo senza i privilegi di amministratore ha
+ \item[\errcode{EINVAL}] i valori per \param{resource} non sono validi.
+ \item[\errcode{EPERM}] un processo senza i privilegi di amministratore ha
cercato di innalzare i propri limiti.
\end{errlist}
ed \errval{EFAULT}.}
\begin{errlist}
\item[\errcode{EACCESS}] non si hanno i permessi per accedere a
\param{pathname}.
- \item[\errcode{EPERM}] Il processo non ha privilegi sufficienti ad
+ \item[\errcode{EPERM}] il processo non ha privilegi sufficienti ad
abilitare il \textit{BSD accounting}.
\item[\errcode{ENOSYS}] il kernel non supporta il \textit{BSD accounting}.
\item[\errcode{EUSER}] non sono disponibili nel kernel strutture per il
\item[\errcode{ENOTSOCK}] il file descriptor non è associato ad un socket.
\item[\errcode{EACCES}] si è cercato di usare una porta riservata senza
sufficienti privilegi.
- \item[\errcode{EADDRNOTAVAIL}] Il tipo di indirizzo specificato non è
+ \item[\errcode{EADDRNOTAVAIL}] il tipo di indirizzo specificato non è
disponibile.
\item[\errcode{EADDRINUSE}] qualche altro socket sta già usando l'indirizzo.
\end{errlist}
\item[\errcode{EAGAIN} o \errcode{EWOULDBLOCK}] il socket è stato impostato
come non bloccante (vedi sez.~\ref{sec:file_noblocking}), e non ci sono
connessioni in attesa di essere accettate.
- \item[\errcode{EPERM}] Le regole del firewall non consentono la connessione.
+ \item[\errcode{EPERM}] le regole del firewall non consentono la connessione.
\item[\errcode{ENOBUFS}, \errcode{ENOMEM}] questo spesso significa che
l'allocazione della memoria è limitata dai limiti sui buffer dei socket,
non dalla memoria di sistema.
- \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale.
+ \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale.
\end{errlist}
Inoltre possono essere restituiti gli errori di rete relativi al nuovo
socket, diversi a secondo del protocollo, come: \errval{EMFILE},