il caso specifico, possono essere trovate nella descrizione del prototipo
della funzione.
-I codici di errore sono riportati come costanti di tipo \type{int}, i valori
+I codici di errore sono riportati come costanti di tipo \ctyp{int}, i valori
delle costanti sono definiti da macro di preprocessore nel file citato, e
possono variare da architettura a architettura; è pertanto necessario
riferirsi ad essi tramite i nomi simbolici. Le funzioni \func{perror} e
-\func{strerror} (vedi \secref{sec:intro_strerror}) possono essere usate per
+\func{strerror} (vedi \secref{sec:sys_strerror}) possono essere usate per
ottenere dei messaggi di errore più espliciti.
che non è un \textit{block device} in un contesto in cui era necessario
specificare un \textit{block device} (ad esempio si è tentato di montare un
file ordinario).
-\item \macro{EEXIST} \textit{File exists}. Si è specficato un file esistente
- in un constesto in cui ha senso solo specificare un nuovo file.
+\item \macro{EEXIST} \textit{File exists}. Si è specificato un file esistente
+ in un contesto in cui ha senso solo specificare un nuovo file.
\item \macro{EBUSY} \textit{Resource busy}. Una risorsa di sistema che non può
essere condivisa è occupata. Ad esempio si è tentato di cancellare la
- directory su cui si è montato un filesistem.
+ directory su cui si è montato un filesystem.
\item \macro{EXDEV} \textit{Cross-device link}. Si è tentato di creare un link
diretto che attraversa due filesystem differenti.
\item \macro{ENODEV} \textit{No such device}. Si è indicato un tipo di device
\item \macro{EROFS} \textit{Read-only file system}. il file risiede su un filesystem read-only.
\item \macro{EMLINK} \textit{Too many links}. Ci sono troppi link al file (il
numero massimo è specificato dalla variabile \macro{LINK\_MAX}, vedi
- \secref{sec:xxx_limits}).
+ \secref{sec:sys_limits}).
\item \macro{EPIPE} \textit{Broken pipe}. Non c'è un processo che stia
leggendo l'altro capo della pipe. Ogni funzione che restituisce questo
errore genera anche un segnale \macro{SIGPIPE}, la cui azione di default è
terminare il programma; pertanto non si potrà vedere questo errore fintanto
che \macro{SIGPIPE} non viene gestito o bloccato.
+\item \macro{ENOTEMPTY} \textit{Directory not empty}. La directory non è vuota
+ quando l'operazione richiede che lo sia. È l'errore tipico che si ha quando
+ si cerca di cancellare una directory contenente dei file.
+\item \macro{EUSERS} \textit{Too many users}. Troppi utenti, il sistema delle
+ quote rileva troppi utenti nel sistema.
+\item \macro{EDQUOT} \textit{Quota exceeded}. Si è ecceduta la quota di disco
+ dell'utente.
+\item \macro{ESTALE} \textit{Stale NFS file handle}. Indica un problema
+ interno a NFS causato da cambiamenti del filesystem del sistema remoto. Per
+ recuperare questa condizione in genere è necessario smontare e rimontare il
+ filesystem NFS.
+\item \macro{EREMOTE} \textit{Object is remote}. Si è fatto un tentativo di
+ montare via NFS un filesystem remoto con un nome che già specifica un
+ filesystem montato via NFS.
+\item \macro{ENOLCK} \textit{No locks available}. È usato dalle utilità per la
+ gestione del file lock; non viene generato da un sistema GNU, ma può
+ risultare da un'operazione su un server NFS di un altro sistema.
+\item \macro{EFTYPE} \textit{Inappropriate file type or format}. Il file è di
+ tipo sbagliato rispetto all'operazione richiesta o un file di dati ha un
+ formato sbagliato. Alcuni sistemi restituiscono questo errore quando si
+ cerca di settare lo \textit{sticky bit} su un file che non è una directory.
+\end{description}
gestione dei processi.
\begin{description}
-
\item \macro{ESRCH} \textit{No process matches the specified process ID}. Non
esiste un processo con il \acr{pid} specificato.
\item \macro{E2BIG} \textit{Argument list too long}. Lista degli argomenti
\item \macro{ECHILD} \textit{There are no child processes}. Non esiste un
processo figlio. Viene rilevato dalle funzioni per la gestione dei processi
figli.
+%\item \macro{EPROCLIM} \textit{}. Il limite dell'utente per nuovi processi
+% sarà ecceduto alla prossima \func{fork}. (non credo esista in linux)
+\end{description}
\section{Gli errori di rete}
attinenti ad errori che riguardano operazioni specifiche relative alla
gestione dei socket e delle connessioni di rete.
-\item \macro{EINPROGRESS} \textit{Operation now in progress}.
-\item \macro{EALREADY} \textit{Operation already in progress}.
-\item \macro{ENOTSOCK} \textit{Socket operation on non-socket}.
-\item \macro{EMSGSIZE} \textit{Message too long}.
-\item \macro{EPROTOTYPE} \textit{Protocol wrong type for socket}.
-\item \macro{ENOPROTOOPT} \textit{Protocol not available}.
-\item \macro{EPROTONOSUPPORT} \textit{Protocol not supported}.
-\item \macro{ESOCKTNOSUPPORT} \textit{Socket type not supported}.
-\item \macro{EOPNOTSUPP} \textit{Operation not supported on transport endpoint}.
-\item \macro{EPFNOSUPPORT} \textit{Protocol family not supported}.
-\item \macro{EAFNOSUPPORT} \textit{Address family not supported by protocol}.
-\item \macro{EADDRINUSE} \textit{Address already in use}.
-\item \macro{EADDRNOTAVAIL} \textit{Cannot assign requested address}.
-\item \macro{ENETDOWN} \textit{Network is down}.
-\item \macro{ENETUNREACH} \textit{Network is unreachable}.
-\item \macro{ENETRESET} \textit{Network dropped connection because of reset}.
-\item \macro{ECONNABORTED} \textit{Software caused connection abort}.
-\item \macro{ECONNRESET} \textit{Connection reset by peer}.
-\item \macro{ENOBUFS} \textit{No buffer space available}.
-\item \macro{EISCONN} \textit{Transport endpoint is already connected}.
-\item \macro{ENOTCONN} \textit{Transport endpoint is not connected}.
-\item \macro{EDESTADDRREQ} \textit{Destination address required}.
-\item \macro{ESHUTDOWN} \textit{Cannot send after transport endpoint shutdown}.
-\item \macro{ETOOMANYREFS} \textit{Too many references: cannot splice}.
-\item \macro{ETIMEDOUT} \textit{Connection timed out}.
-\item \macro{ECONNREFUSED} \textit{Connection refused}.
-
-\item \macro{EHOSTDOWN} \textit{Host is down}.
-\item \macro{EHOSTUNREACH} \textit{No route to host}.
-\item \macro{ENOTEMPTY} \textit{Directory not empty}.
-\item \macro{EPROCLIM} \textit{}.
-\item \macro{EUSERS} \textit{Too many users}.
-\item \macro{EDQUOT} \textit{Quota exceeded}.
-\item \macro{ESTALE} \textit{Stale NFS file handle}.
-\item \macro{EREMOTE} \textit{Object is remote}.
-%\item \macro{EBADRPC} \textit{}.
-%\item \macro{ERPCMISMATCH} \textit{}.
-%\item \macro{EPROGUNAVAIL} \textit{}.
-%\item \macro{EPROGMISMATCH} \textit{}.
-%\item \macro{EPROCUNAVAIL} \textit{}.
-\item \macro{ENOLCK} \textit{No locks available}.
-\item \macro{EFTYPE} \textit{Inappropriate file type or format}.
-%\item \macro{EAUTH} \textit{}.
-\item \macro{ENEEDAUTH} \textit{}.
-\item \macro{ENOSYS} \textit{Function not implemented}.
-\item \macro{ENOTSUP} \textit{Not supported}.
-\item \macro{EILSEQ} \textit{Illegal byte sequence}.
-%\item \macro{EBACKGROUND} \textit{}.
-%\item \macro{EDIED} \textit{}.
-%\item \macro{ED} \textit{}.
-%\item \macro{EGREGIOUS} \textit{}.
-%\item \macro{EIEIO} \textit{}.
-%\item \macro{EGRATUITOUS} \textit{}.
-\item \macro{EBADMSG} \textit{Not a data message}.
-\item \macro{EIDRM} \textit{Identifier removed}.
-\item \macro{EMULTIHOP} \textit{Multihop attempted}.
-\item \macro{ENODATA} \textit{No data available}.
-\item \macro{ENOLINK} \textit{Link has been severed}.
-\item \macro{ENOMSG} \textit{No message of desired type}.
-\item \macro{ENOSR} \textit{Out of streams resources}.
-\item \macro{ENOSTR} \textit{Device not a stream}.
-\item \macro{EOVERFLOW} \textit{Value too large for defined data type}.
-\item \macro{EPROTO} \textit{Protocol error}.
-\item \macro{ETIME} \textit{Timer expired}.
+\begin{description}
+\item \macro{ENOTSOCK} \textit{Socket operation on non-socket}. Si è tentata
+ un'operazione su un file descriptor che non è un socket quando invece era
+ richiesto un socket.
+\item \macro{EMSGSIZE} \textit{Message too long}. Le dimensioni di un
+ messaggio inviato su un socket sono eccedono la massima lunghezza supportata.
+\item \macro{EPROTOTYPE} \textit{Protocol wrong type for socket}. Protocollo
+ sbagliato per il socket. Il socket usato non supporta il protocollo di
+ comunicazione richiesto.
+\item \macro{ENOPROTOOPT} \textit{Protocol not available}. Protocollo non
+ disponibile. Si è richiesta un'opzione per il socket non disponibile con il
+ protocollo usato.
+\item \macro{EPROTONOSUPPORT} \textit{Protocol not supported}. Protocollo non
+ supportato. Il tipo di socket non supporta il protocollo richiesto (un
+ probabile errore nella specificazione del protocollo).
+\item \macro{ESOCKTNOSUPPORT} \textit{Socket type not supported}. Socket non
+ supportato. Il tipo di socket scelto non è supportato.
+\item \macro{EOPNOTSUPP} \textit{Operation not supported on transport
+ endpoint}. L'operazione richiesta non è supportata. Alcune funzioni non
+ hanno senso per tutti i tipi di socket, ed altre non sono implementate per
+ tutti i protocolli di trasmissione. Questo errore quando un socket non
+ supporta una particolare operazione, e costituisce una indicazione generica
+ che il server non sa cosa fare per la chiamata effettuata.
+\item \macro{EPFNOSUPPORT} \textit{Protocol family not supported}. Famiglia di
+ protocolli non supportata. La famiglia di protocolli richiesta non è
+ supportata.
+\item \macro{EAFNOSUPPORT} \textit{Address family not supported by protocol}.
+ Famiglia di indirizzi non supportata. La famiglia di indirizzi richiesta non
+ è supportata, o è inconsistente con il protocollo usato dal socket.
+\item \macro{EADDRINUSE} \textit{Address already in use}. L'indirizzo del
+ socket richiesto è gia utilizzato (ad esempio si è richiesto il \func{bind}
+ per una porta già in uso).
+\item \macro{EADDRNOTAVAIL} \textit{Cannot assign requested address}.
+ L'indirizzo richiesto non è disponibile (ad esempio si è cercato di dare al
+ socket un nome che non corrisponde al nome della stazione locale).
+\item \macro{ENETDOWN} \textit{Network is down}. L'operazione sul socket è
+ fallita perché la rete è sconnessa.
+\item \macro{ENETUNREACH} \textit{Network is unreachable}. L'operazione è
+ fallita perché l'indirizzo richiesto è irraggiungibile (ad esempio la
+ sottorete della stazione remota è irraggiungibile).
+\item \macro{ENETRESET} \textit{Network dropped connection because of reset}.
+ Una connessione è stata resettata perché l'host remoto è caduto.
+\item \macro{ECONNABORTED} \textit{Software caused connection abort}. Una
+ connessione è stata abortita localmente.
+\item \macro{ECONNRESET} \textit{Connection reset by peer}. Una connessione è
+ stata chiusa per ragioni fuori dal controllo dell'host locale, come il
+ riavvio di una macchina remota o un qualche errore non recuperabile sul
+ protocollo.
+\item \macro{ENOBUFS} \textit{No buffer space available}. Tutti i buffer per
+ le operazioni di I/O del kernel sono occupati. In generale questo errore è
+ sinonimo di \macro{ENOMEM}, ma attiene alle funzioni di input/output. In
+ caso di operazioni sulla rete si può ottenere questo errore invece
+ dell'altro.
+\item \macro{EISCONN} \textit{Transport endpoint is already connected}. Si è
+ tentato di connettere un socket che è gia connesso.
+\item \macro{ENOTCONN} \textit{Transport endpoint is not connected}. Il socket
+ non è connesso a niente. Si ottiene questo errore quando si cerca di
+ trasmettere dati su un socket senza avere specificato in precedenza la loro
+ destinazione. Nel caso di socket senza connessione (ad esempio socket UDP)
+ l'errore che si ottiene è \macro{EDESTADDRREQ}.
+\item \macro{EDESTADDRREQ} \textit{Destination address required}. Non c'è un
+ indirizzo di destinazione di default per il socket. Si ottiene questo errore
+ mandando dato su un socket senza connessione senza averne prima specificato
+ una destinazione.
+\item \macro{ESHUTDOWN} \textit{Cannot send after transport endpoint
+ shutdown}. Il socket su cui si cerca di inviare dei dati ha avuto uno
+ shutdown.
+\item \macro{ETOOMANYREFS} \textit{Too many references: cannot splice}. La
+ glibc dice ???
+\item \macro{ETIMEDOUT} \textit{Connection timed out}. Un'operazione sul
+ socket non ha avuto risposta entro il periodo di timeout.
+\item \macro{ECONNREFUSED} \textit{Connection refused}. Un host remoto ha
+ rifiutato la connessione (in genere dipende dal fatto che non c'è un server
+ per soddisfare il servizio richiesto).
+\item \macro{EHOSTDOWN} \textit{Host is down}. L'host remoto di una
+ connessione è giù.
+\item \macro{EHOSTUNREACH} \textit{No route to host}. L'host remoto di una
+ connessione non è raggiungibile.
+\end{description}
\section{Errori generici}
In questa sezione sono raccolti i codici restituiti dalle funzioni di libreria
-attinenti ad errori generici, si trovano qui tutti i cosici di errore non
+attinenti ad errori generici, si trovano qui tutti i codici di errore non
specificati nelle sezioni precedenti.
+\begin{description}
\item \macro{EINTR} \textit{Interrupted function call}. Una funzione di
libreria è stata interrotta. In genere questo avviene causa di un segnale
asincrono al processo che impedisce la conclusione della chiamata. In questo
queste situazioni, nel qual caso si avrebbe in blocco.
\item \macro{EFAULT} \textit{Bad address}. Una stringa passata come parametro
è fuori dello spazio di indirizzi del processo, in genere questa situazione
- provoca l'emissione di un sengale di \textit{segment violation}
+ provoca l'emissione di un segnale di \textit{segment violation}
(\macro{SIGSEGV}).
\item \macro{EINVAL} \textit{Invalid argument}. Errore utilizzato per
segnalare vari tipi di problemi dovuti all'aver passato un argomento
quando il risultato non è rappresentabile a causa di un overflow o di un
underflow.
\item \macro{EAGAIN} \textit{Resource temporarily unavailable}. La funzione è
- fallita ma potrebbe funzionare se riprovata.
+ fallita ma potrebbe funzionare se la chiamata fosse ripetuta. Questo errore
+ accade in due tipologie di situazioni:
+ \begin{itemize}
+ \item Si è effettuata un'operazione che si sarebbe bloccata su un oggetto
+ che è stato posto in modalità non bloccante. Nei vecchi sistemi questo era
+ un codice diverso, \macro{EWOULDBLOCK}. In genere questo ha a che fare con
+ file o socket, per i quali si può usare la funzione \func{select} per
+ vedere quando l'operazione richiesta (lettura, scrittura o connessione)
+ diventa possibile.
+ \item Indica la carenza di una risorsa di sistema che non è al momento
+ disponibile (ad esempio \func{fork} può fallire con questo errore se si è
+ esaurito il numero di processi contemporanei disponibili). La ripetizione
+ della chiamata in un periodo successivo, in cui la carenza della risorsa
+ richiesta può essersi attenuata, può avere successo. Questo tipo di
+ carenza è spesso indice di qualcosa che non va nel sistema, è pertanto
+ opportuno segnalare esplicitamente questo tipo di errori.
+ \end{itemize}
\item \macro{EWOULDBLOCK} \textit{Operation would block}. In Linux è identico
a \macro{EAGAIN}.
+\item \macro{EINPROGRESS} \textit{Operation now in progress}. Operazione in
+ corso. Un'operazione che non può essere completata immediatamente è stata
+ avviata su un oggetto posto in modalità non-bloccante. Questo errore viene
+ riportato per operazioni che si dovrebbero sempre bloccare (come per una
+ \func{connect}) e che pertanto non possono riportare \macro{EAGAIN},
+ l'errore indica che l'operazione è stata avviata correttamente e occorrerà
+ del tempo perché si possa completare. La ripetizione della chiamata darebbe
+ luogo ad un errore \macro{EALREADY}.
+\item \macro{EALREADY} \textit{Operation already in progress}. L'operazione è
+ già in corso. Si è tentata un'operazione già in corso su un oggetto posto in
+ modalità non-bloccante.
+\item \macro{ENOSYS} \textit{Function not implemented}. Indica che la funzione
+ non è implementata o nelle librerie del C o nel kernel.
+\item \macro{ENOTSUP} \textit{Not supported}. Una funzione ritorna questo
+ errore quando i parametri sono validi ma l'operazione richiesta non è
+ supportata. Questo significa che la funzione non implementa quel particolare
+ comando o opzione o che, in caso di oggetti specifici (file descriptor o
+ altro) non è in grado di supportare i parametri richiesti.
+\item \macro{EILSEQ} \textit{Illegal byte sequence}. Nella decodifica di un
+ carattere multibyte si è avuta una sequenza errata o incompleta o si è
+ specificato un valore non valido.
+\end{description}
+
+
+\begin{description}
+%\item \macro{EBADRPC} \textit{}.
+%\item \macro{ERPCMISMATCH} \textit{}.
+%\item \macro{EPROGUNAVAIL} \textit{}.
+%\item \macro{EPROGMISMATCH} \textit{}.
+%\item \macro{EPROCUNAVAIL} \textit{}.
+%\item \macro{EAUTH} \textit{}.
+%\item \macro{ENEEDAUTH} \textit{}.
+%\item \macro{EBACKGROUND} \textit{}.
+%\item \macro{EDIED} \textit{}.
+%\item \macro{ED} \textit{}.
+%\item \macro{EGREGIOUS} \textit{}.
+%\item \macro{EIEIO} \textit{}.
+%\item \macro{EGRATUITOUS} \textit{}.
+\item \macro{EBADMSG} \textit{Not a data message}.
+\item \macro{EIDRM} \textit{Identifier removed}.
+\item \macro{EMULTIHOP} \textit{Multihop attempted}.
+\item \macro{ENODATA} \textit{No data available}.
+\item \macro{ENOLINK} \textit{Link has been severed}.
+\item \macro{ENOMSG} \textit{No message of desired type}.
+\item \macro{ENOSR} \textit{Out of streams resources}.
+\item \macro{ENOSTR} \textit{Device not a stream}.
+\item \macro{EOVERFLOW} \textit{Value too large for defined data type}.
+\item \macro{EPROTO} \textit{Protocol error}.
+\item \macro{ETIME} \textit{Timer expired}.
\end{description}
+
+
\section{Errori del kernel}
\label{sec:err_kernel_err}
sono usati dalle funzioni di libreria, ma vengono riportati da alcune system
call (TODO verificare i dettagli, eventualmente cassare).
+\begin{description}
\item \macro{ERESTART} \textit{Interrupted system call should be restarted}.
\item \macro{ECHRNG} \textit{Channel number out of range}.
\item \macro{EL2NSYNC} \textit{Level 2 not synchronized}.
\end{description}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "gapil"
+%%% End: