1 \chapter{I codici di errore}
4 Si riportano in questa appendice tutti i codici di errore. Essi sono
5 accessibili attraverso l'inclusione del file di header \file{errno.h}, che
6 definisce anche la variabile globale \var{errno}. Per ogni errore definito
7 riporteremo la stringa stampata da \func{perror} ed una breve spiegazione. Si
8 tenga presente che spiegazioni più particolareggiate, qualora necessarie per
9 il caso specifico, possono essere trovate nella descrizione del prototipo
12 I codici di errore sono riportati come costanti di tipo \type{int}, i valori
13 delle costanti sono definiti da macro di preprocessore nel file citato, e
14 possono variare da architettura a architettura; è pertanto necessario
15 riferirsi ad essi tramite i nomi simbolici. Le funzioni \func{perror} e
16 \func{strerror} (vedi \secref{sec:intro_strerror}) possono essere usate per
17 ottenere dei messaggi di errore più espliciti.
20 \section{Gli errori dei file}
21 \label{sec:err_file_errors}
23 In questa sezione sono raccolti i codici restituiti dalle funzioni di libreria
24 attinenti ad errori che riguardano operazioni specifiche relative alla
28 \item \macro{EPERM} \textit{Operation not permitted}. L'operazione non è
29 permessa: solo il proprietario del file o un processo con sufficienti
30 privilegi può eseguire l'operazione.
31 \item \macro{ENOENT} \textit{No such file or directory}. Il file indicato dal
32 pathname non esiste: o una delle componenti non esiste o il pathname
33 contiene un link simbolico spezzato. Errore tipico di un riferimento ad un
34 file che si suppone erroneamente essere esistente.
35 \item \macro{EIO} \textit{Input/output error}. Errore di input/output: usato
36 per riportare errori hardware in lettura/scrittura su un dispositivo.
37 \item \macro{ENXIO} \textit{No such device or address}. Device inesistente: il
38 sistema ha tentato di usare un dispositivo attraverso il file specificato,
39 ma non lo ha trovato. Può significare che il file di dispositivo non è
40 corretto, che il modulo relativo non è stato caricato nel kernel, o che il
41 dispositivo è fisicamente assente o non funzionante.
42 \item \macro{ENOEXEC} \textit{Invalid executable file format}. Il file non ha
43 un formato eseguibile, è un errore riscontrato dalle funzioni \func{exec}.
44 \item \macro{EBADF} \textit{Bad file descriptor}. File descriptor non valido:
45 si è usato un file descriptor inesistente, o aperto in sola lettura per
46 scrivere, o viceversa, o si è cercato di eseguire un'operazione non
47 consentita per quel tipo di file descriptor.
48 \item \macro{EACCESS} \textit{Permission denied}. Permesso negato; l'accesso
49 al file non è consentito: i permessi del file o della directory non
50 consentono l'operazione.
51 \item \macro{ELOOP} \textit{Too many symbolic links encountered}. Ci sono
52 troppi link simbolici nella risoluzione di un pathname.
53 \item \macro{ENAMETOOLONG} \textit{File name too long}. Si è indicato un
54 pathname troppo lungo.
55 \item \macro{ENOTBLK} \textit{Block device required}. Si è specificato un file
56 che non è un \textit{block device} in un contesto in cui era necessario
57 specificare un \textit{block device} (ad esempio si è tentato di montare un
59 \item \macro{EEXIST} \textit{File exists}. Si è specficato un file esistente
60 in un constesto in cui ha senso solo specificare un nuovo file.
61 \item \macro{EBUSY} \textit{Resource busy}. Una risorsa di sistema che non può
62 essere condivisa è occupata. Ad esempio si è tentato di cancellare la
63 directory su cui si è montato un filesistem.
64 \item \macro{EXDEV} \textit{Cross-device link}. Si è tentato di creare un link
65 diretto che attraversa due filesystem differenti.
66 \item \macro{ENODEV} \textit{No such device}. Si è indicato un tipo di device
67 sbagliato ad una funzione che ne richiede uno specifico.
68 \item \macro{ENOTDIR} \textit{Not a directory}. Si è specificato un file che
69 non è una directory in una operazione che richiede una directory.
70 \item \macro{EISDIR} \textit{Is a directory}. Il file specificato è una
71 directory, non può essere aperto in scrittura, né si possono creare o
72 rimuovere link diretti ad essa.
73 \item \macro{EMFILE} \textit{Too many open files}. Il processo corrente ha
74 troppi file aperti e non può aprirne altri. Anche i descrittori duplicati
75 vengono tenuti in conto\footnote{Il numero massimo di file aperti è
76 controllabile dal sistema, in Linux si può usare il comando \cmd{ulimit}}.
77 \item \macro{ENFILE} \textit{File table overflow}. Ci sono troppi file aperti
79 \item \macro{ENOTTY} \textit{Not a terminal}. Si è tentata una operazione di
80 controllo relativa ad un terminale su un file che non lo è.
81 \item \macro{ETXTBSY} \textit{Text file busy}. Si è cercato di eseguire un
82 file che è aperto in scrittura, o scrivere un file che è in esecuzione.
83 \item \macro{EFBIG} \textit{File too big}. Si è ecceduto il limite imposto dal
84 sistema sulla dimensione massima che un file può avere.
85 \item \macro{ENOSPC} \textit{No space left on device}. la directory in cui si
86 vuole creare il link non ha spazio per ulteriori voci.
87 \item \macro{ESPIPE} \textit{Invalid seek operation}.
88 \item \macro{EROFS} \textit{Read-only file system}. il file risiede su un filesystem read-only.
89 \item \macro{EMLINK} \textit{Too many links}. Ci sono troppi link al file (il
90 numero massimo è specificato dalla variabile \macro{LINK\_MAX}, vedi
91 \secref{sec:sys_limits}).
92 \item \macro{EPIPE} \textit{Broken pipe}. Non c'è un processo che stia
93 leggendo l'altro capo della pipe. Ogni funzione che restituisce questo
94 errore genera anche un segnale \macro{SIGPIPE}, la cui azione di default è
95 terminare il programma; pertanto non si potrà vedere questo errore fintanto
96 che \macro{SIGPIPE} non viene gestito o bloccato.
97 \item \macro{ENOTEMPTY} \textit{Directory not empty}. La directory non è vuota
98 quando l'operazione richiede che lo sia. È l'errore tipico che si ha quando
99 si cerca di cancellare una directory contenente dei file.
100 \item \macro{EUSERS} \textit{Too many users}. Troppi utenti, il sistema delle
101 quote rileva troppi utenti nel sistema.
102 \item \macro{EDQUOT} \textit{Quota exceeded}. Si è ecceduta la quota di disco
104 \item \macro{ESTALE} \textit{Stale NFS file handle}. Indica un problema
105 interno a NFS causato da cambiamenti del filesystem del sistema remoto. Per
106 recuperare questa condizione in genere è necessario smontare e rimontare il
108 \item \macro{EREMOTE} \textit{Object is remote}. Si è fatto un tentativo di
109 montare via NFS un filesystem remoto con un nome che già specifica un
110 filesystem montao via NFS.
111 \item \macro{ENOLCK} \textit{No locks available}. È usato dalle utilità per la
112 gestione del file lock; non viene generato da un sistema GNU, ma può
113 risultare da un'operazione su un server NFS di un altro sistema.
114 \item \macro{EFTYPE} \textit{Inappropriate file type or format}. Il file è di
115 tipo sbagliato rispetto all'operazione richiesta o un file di dati ha un
116 formato sbagliato. Alcuni sistemi restituiscono questo errore quando si
117 cerca di settare lo \textit{sticky bit} su un file che non è una directory.
122 \section{Gli errori dei processi}
123 \label{sec:err_proc_errors}
125 In questa sezione sono raccolti i codici restituiti dalle funzioni di libreria
126 attinenti ad errori che riguardano operazioni specifiche relative alla
127 gestione dei processi.
130 \item \macro{ESRCH} \textit{No process matches the specified process ID}. Non
131 esiste un processo con il \acr{pid} specificato.
132 \item \macro{E2BIG} \textit{Argument list too long}. Lista degli argomenti
133 troppo lunga: è una condizione prevista da POSIX quando la lista degli
134 argomenti passata ad una delle funzioni \func{exec} occupa troppa memoria,
135 non può mai accadere in GNU/Linux.
136 \item \macro{ECHILD} \textit{There are no child processes}. Non esiste un
137 processo figlio. Viene rilevato dalle funzioni per la gestione dei processi
139 %\item \macro{EPROCLIM} \textit{}. Il limite dell'utente per nuovi processi
140 % sarà ecceduto alla prossima \func{fork}. (non credo esista in linux)
144 \section{Gli errori di rete}
145 \label{sec:err_network}
147 In questa sezione sono raccolti i codici restituiti dalle funzioni di libreria
148 attinenti ad errori che riguardano operazioni specifiche relative alla
149 gestione dei socket e delle connessioni di rete.
153 \item \macro{ENOTSOCK} \textit{Socket operation on non-socket}. Si è tentata
154 un'operazione su un file descriptor che non è un socket quando invece era
156 \item \macro{EMSGSIZE} \textit{Message too long}. Le dimensioni di un
157 messaggio inviato su un socket sono eccedono la massima lunghezza supportata.
158 \item \macro{EPROTOTYPE} \textit{Protocol wrong type for socket}. Protocollo
159 sbagliato per il socket. Il socket usato non supporta il protocollo di
160 comunicazione richiesto.
161 \item \macro{ENOPROTOOPT} \textit{Protocol not available}. Protocollo non
162 disponibile. Si è richiesta un'opzione per il socket non diponibile con il
164 \item \macro{EPROTONOSUPPORT} \textit{Protocol not supported}. Protocollo non
165 supportato. Il tipo di socket non supporta il protocollo richiesto (un
166 probabile errore nella specificazione del protocollo).
167 \item \macro{ESOCKTNOSUPPORT} \textit{Socket type not supported}. Socket non
168 supportato. Il tipo di socket scelto non è supportato.
169 \item \macro{EOPNOTSUPP} \textit{Operation not supported on transport
170 endpoint}. L'operazione richesta non è supportata. Alcune funzioni non
171 hanno senso per tutti i tipi di socket, ed altre non sono implementate per
172 tutti i protocolli di trasmissione. Questo errore quando un socket non
173 supporta una particolare operazione, e costituisce una indicazione generica
174 che il server non sa cosa fare per la chiamata effettuata.
175 \item \macro{EPFNOSUPPORT} \textit{Protocol family not supported}. Famiglia di
176 protocolli non supportata. La famiglia di protocolli richiesta non è
178 \item \macro{EAFNOSUPPORT} \textit{Address family not supported by protocol}.
179 Famiglia di indirizzi non supportata. La famiglia di indirizzi richiesta non
180 è supportata, o è inconsistente con il protocollo usato dal socket.
181 \item \macro{EADDRINUSE} \textit{Address already in use}. L'indirizzo del
182 socket richiesto è gia utilizzato (ad esempio si è richiesto il \func{bind}
183 per una porta già in uso).
184 \item \macro{EADDRNOTAVAIL} \textit{Cannot assign requested address}.
185 L'indirizzo richiesto non è disponibile (ad esempio si è cercato di dare al
186 socket un nome che non corrisponde al nome della stazione locale).
187 \item \macro{ENETDOWN} \textit{Network is down}. L'operazione sul socket è
188 fallita perché la rete è sconnessa.
189 \item \macro{ENETUNREACH} \textit{Network is unreachable}. L'operazione è
190 fallita perché l'indirizzo richiesto è irraggiungibile (ad esempio la
191 sottorete della stazione remota è irraggiungibile).
192 \item \macro{ENETRESET} \textit{Network dropped connection because of reset}.
193 Una connessione è stata resettata perché l'host remoto è caduto.
194 \item \macro{ECONNABORTED} \textit{Software caused connection abort}. Una
195 connessione è stata abortita localmente.
196 \item \macro{ECONNRESET} \textit{Connection reset by peer}. Una connessione è
197 stata chiusa per ragioni fuori dal controllo dell'host locale, come il
198 riavvio di una macchina remota o un qualche errore non recuperabile sul
200 \item \macro{ENOBUFS} \textit{No buffer space available}. Tutti i buffer per
201 le operazioni di I/O del kernel sono occupati. In generale questo errore è
202 sinonimo di \macro{ENOMEM}, ma attiene alle funzioni di input/output. In
203 caso di operazioni sulla rete si può ottenere questo errore invece
205 \item \macro{EISCONN} \textit{Transport endpoint is already connected}. Si è
206 tentato di connettere un socket che è gia connesso.
207 \item \macro{ENOTCONN} \textit{Transport endpoint is not connected}. Il socket
208 non è connesso a niente. Si ottiene questo errore quando si cerca di
209 trasmettere dati su un socket senza avere specificato in precedenza la loro
210 destinazione. Nel caso di socket senza connessione (ad esempio socket UDP)
211 l'errore che si ottiene è \macro{EDESTADDRREQ}.
212 \item \macro{EDESTADDRREQ} \textit{Destination address required}. Non c'è un
213 indirizzo di destinazione di default per il socket. Si ottiene questo errore
214 mandando dato su un socket senza connessione senza averne prima specificato
216 \item \macro{ESHUTDOWN} \textit{Cannot send after transport endpoint
217 shutdown}. Il socket su cui si cerca di inviare dei dati ha avuto uno
219 \item \macro{ETOOMANYREFS} \textit{Too many references: cannot splice}. La
221 \item \macro{ETIMEDOUT} \textit{Connection timed out}. Un'operazione sul
222 socket non ha avuto risposta entro il periodo di timeout.
223 \item \macro{ECONNREFUSED} \textit{Connection refused}. Un host remoto ha
224 rifiutato la connessione (in genere dipende dal fatto che non c'è un server
225 per soddisfare il servizio richiesto).
226 \item \macro{EHOSTDOWN} \textit{Host is down}. L'host remorto di una
228 \item \macro{EHOSTUNREACH} \textit{No route to host}. L'host remorto di una
229 connessione non è raggiungibile.
232 \section{Errori generici}
234 In questa sezione sono raccolti i codici restituiti dalle funzioni di libreria
235 attinenti ad errori generici, si trovano qui tutti i cosici di errore non
236 specificati nelle sezioni precedenti.
239 \item \macro{EINTR} \textit{Interrupted function call}. Una funzione di
240 libreria è stata interrotta. In genere questo avviene causa di un segnale
241 asincrono al processo che impedisce la conclusione della chiamata. In questo
242 caso è necessario ripetere la chiamata alla funzione.
243 \item \macro{ENOMEM} \textit{No memory available}. Il kernel non è in grado di
244 allocare ulteriore memoria per completare l'operazione richiesta.
245 \item \macro{EDEADLK} \textit{Deadlock avoided}. L'allocazione di una risorsa
246 avrebbe causato un deadlock. Non sempre il sistema è in grado di riconoscere
247 queste situazioni, nel qual caso si avrebbe in blocco.
248 \item \macro{EFAULT} \textit{Bad address}. Una stringa passata come parametro
249 è fuori dello spazio di indirizzi del processo, in genere questa situazione
250 provoca l'emissione di un sengale di \textit{segment violation}
252 \item \macro{EINVAL} \textit{Invalid argument}. Errore utilizzato per
253 segnalare vari tipi di problemi dovuti all'aver passato un argomento
254 sbagliato ad una funzione di libreria.
255 \item \macro{EDOM} \textit{Domain error}. È usato dalle funzioni matematiche
256 quando il valore di un argomento è al di fuori dell'intervallo in cui sono
258 \item \macro{ERANGE} \textit{Range error}. È usato dalle funzioni matematiche
259 quando il risultato non è rappresentabile a causa di un overflow o di un
261 \item \macro{EAGAIN} \textit{Resource temporarily unavailable}. La funzione è
262 fallita ma potrebbe funzionare se la chiamata fosse ripetuta. Questo errore
263 accade in due tipologie di situazioni:
265 \item Si è effettuata un'operazione che si sarebbe bloccata su un oggetto
266 che è stato posto in modalità non bloccante. Nei vecchi sistemi questo era
267 un codice diverso, \macro{EWOULDBLOCK}. In genere questo ha a che fare con
268 file o socket, per i quali si può usare la funzione \func{select} per
269 vedere quando l'operazione richiesta (lettura, scrittura o connessione)
271 \item Indica la carenza di una risorsa di sistema che non è al momento
272 disponibile (ad esempio \func{fork} può fallire con questo errore se si è
273 esaurito il numero di processi contemporanei disponibili). La ripetizione
274 della chiamata in un periodo successivo, in cui la carenza della risorsa
275 richiesta può essersi attenuata, può avere successo. Questo tipo di
276 carenza è spesso indice di qualcosa che non va nel sistema, è pertanto
277 opportuno segnalare esplicitamente questo tipo di errori.
279 \item \macro{EWOULDBLOCK} \textit{Operation would block}. In Linux è identico
281 \item \macro{EINPROGRESS} \textit{Operation now in progress}. Operazione in
282 corso. Un'operazione che non può essere completata immediatamente è stata
283 avviata su un oggetto posto in modalità non-bloccante. Questo errore viene
284 riportato per operazioni che si dovrebbero sempre bloccare (come per una
285 \func{connect}) e che pertanto non possono riportare \macro{EAGAIN},
286 l'errore indica che l'operazione è stata avviata correttamente e occorrerà
287 del tempo perché si possa completare. La ripetizione della chiamata darebbe
288 luogo ad un errore \macro{EALREADY}.
289 \item \macro{EALREADY} \textit{Operation already in progress}. L'operazione è
290 già in corso. Si è tentata un'operazione già in corso su un oggetto posto in
291 modalità non-bloccante.
292 \item \macro{ENOSYS} \textit{Function not implemented}. Indica che la funzione
293 non è implementata o nelle librerie del C o nel kernel.
294 \item \macro{ENOTSUP} \textit{Not supported}. Una funzione ritorna questo
295 errore quando i parametri sono validi ma l'operazione richiesta non è
296 supportata. Questo significa che la funzione non implementa quel particolare
297 comando o opzione o che, in caso di oggetti specifici (file descriptor o
298 altro) non è in grado di supportare i parametri richiesti.
299 \item \macro{EILSEQ} \textit{Illegal byte sequence}. Nella decodifica di un
300 carattere multibyte si è avuta una sequenza errata o incompleta o si è
301 specificato un valore non valido.
306 %\item \macro{EBADRPC} \textit{}.
307 %\item \macro{ERPCMISMATCH} \textit{}.
308 %\item \macro{EPROGUNAVAIL} \textit{}.
309 %\item \macro{EPROGMISMATCH} \textit{}.
310 %\item \macro{EPROCUNAVAIL} \textit{}.
311 %\item \macro{EAUTH} \textit{}.
312 %\item \macro{ENEEDAUTH} \textit{}.
313 %\item \macro{EBACKGROUND} \textit{}.
314 %\item \macro{EDIED} \textit{}.
315 %\item \macro{ED} \textit{}.
316 %\item \macro{EGREGIOUS} \textit{}.
317 %\item \macro{EIEIO} \textit{}.
318 %\item \macro{EGRATUITOUS} \textit{}.
319 \item \macro{EBADMSG} \textit{Not a data message}.
320 \item \macro{EIDRM} \textit{Identifier removed}.
321 \item \macro{EMULTIHOP} \textit{Multihop attempted}.
322 \item \macro{ENODATA} \textit{No data available}.
323 \item \macro{ENOLINK} \textit{Link has been severed}.
324 \item \macro{ENOMSG} \textit{No message of desired type}.
325 \item \macro{ENOSR} \textit{Out of streams resources}.
326 \item \macro{ENOSTR} \textit{Device not a stream}.
327 \item \macro{EOVERFLOW} \textit{Value too large for defined data type}.
328 \item \macro{EPROTO} \textit{Protocol error}.
329 \item \macro{ETIME} \textit{Timer expired}.
336 \section{Errori del kernel}
337 \label{sec:err_kernel_err}
339 In questa sezione sono raccolti i codici di errore interni del kernel. Non
340 sono usati dalle funzioni di libreria, ma vengono riportati da alcune system
341 call (TODO verificare i dettagli, eventualmente cassare).
344 \item \macro{ERESTART} \textit{Interrupted system call should be restarted}.
345 \item \macro{ECHRNG} \textit{Channel number out of range}.
346 \item \macro{EL2NSYNC} \textit{Level 2 not synchronized}.
347 \item \macro{EL3HLT} \textit{Level 3 halted}.
348 \item \macro{EL3RST} \textit{Level 3 reset}.
349 \item \macro{ELNRNG} \textit{Link number out of range}.
350 \item \macro{EUNATCH} \textit{Protocol driver not attached}.
351 \item \macro{ENOCSI} \textit{No CSI structure available}.
352 \item \macro{EL2HLT} \textit{Level 2 halted}.
353 \item \macro{EBADE} \textit{Invalid exchange}.
354 \item \macro{EBADR} \textit{Invalid request descriptor}.
355 \item \macro{EXFULL} \textit{Exchange full}.
356 \item \macro{ENOANO} \textit{No anode}.
357 \item \macro{EBADRQC} \textit{Invalid request code}.
358 \item \macro{EBADSLT} \textit{Invalid slot}.
359 \item \macro{EDEADLOCK} Identico a \macro{EDEADLK}.
360 \item \macro{EBFONT} \textit{Bad font file format}.
361 \item \macro{ENONET} \textit{Machine is not on the network}.
362 \item \macro{ENOPKG} \textit{Package not installed}.
363 \item \macro{EADV} \textit{Advertise error}.
364 \item \macro{ESRMNT} \textit{Srmount error}.
365 \item \macro{ECOMM} \textit{Communication error on send}.
366 \item \macro{EDOTDOT} \textit{RFS specific error}.
367 \item \macro{ENOTUNIQ} \textit{Name not unique on network}.
368 \item \macro{EBADFD} \textit{File descriptor in bad state}.
369 \item \macro{EREMCHG} \textit{Remote address changed}.
370 \item \macro{ELIBACC} \textit{Can not access a needed shared library}.
371 \item \macro{ELIBBAD} \textit{Accessing a corrupted shared library}.
372 \item \macro{ELIBSCN} \textit{.lib section in a.out corrupted}.
373 \item \macro{ELIBMAX} \textit{Attempting to link in too many shared libraries}.
374 \item \macro{ELIBEXEC} \textit{Cannot exec a shared library directly}.
375 \item \macro{ESTRPIPE} \textit{Streams pipe error}.
376 \item \macro{EUCLEAN} \textit{Structure needs cleaning}.
377 \item \macro{ENAVAIL} \textit{No XENIX semaphores available}.
378 \item \macro{EISNAM} \textit{Is a named type file}.
379 \item \macro{EREMOTEIO} \textit{Remote I/O error}.
380 \item \macro{ENOMEDIUM} \textit{No medium found}.
381 \item \macro{EMEDIUMTYPE} \textit{Wrong medium type}.
382 \item \macro{} \textit{}.