\chapter{I codici di errore}
\label{cha:errors}

Si riportano in questa appendice tutti i codici di errore. Essi sono
accessibili attraverso l'inclusione del file di header \file{errno.h}, che
definisce anche la variabile globale \var{errno}. Per ogni errore definito
riporteremo la stringa stampata da \func{perror} ed una breve spiegazione. Si
tenga presente che spiegazioni più particolareggiate, qualora necessarie per
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
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
ottene dei messaggi di errore.


\section{Gli errori dei file}
\label{sec:err_file_errors}

In questa sezione riassumeremo gli errori restituiti dalle funzioni di
libreria che operano sui file.

\begin{description}
  
\item \macro{EPERM} \textit{Operation not permitted}. L'operazione non è
  permessa: solo il proprietario del file o un processo con sufficienti
  privilegi può eseguire l'operazione.
  
\item \macro{ENOENT} \textit{No such file or directory}. Il file indicato dal
  pathname non esiste: o una delle componenti non esiste o il pathname
  contiene un link simbolico spezzato.
  
\item \macro{EIO} \textit{Input/output error}. Errore di input/output: usato
  per riportare errori hardware in lettura/scrittura (su un dispositivo).


\item \macro{ENXIO} \textit{No such device or address}. Device inesistente: il
  sistema ha tentato di usare un dispositivo attraverso il file specificato,
  ma non lo ha trovato. Può significare che il file di dispositivo non è
  corretto, che il modulo relativo non è stato caricato nel kernel, o che il
  dispositico è fisicamente assente o non funzionante.
  
\item \macro{EBADF} \textit{Bad file descriptor}. File descriptor non valido:
  si è usato un file descriptor inesistente, o aperto in sola lettura per
  scrivere, o viceversa.


\item \macro{} \textit{}. 
\item \macro{} \textit{}. 
\item \macro{} \textit{}. 
\item \macro{} \textit{}. 
\item \macro{} \textit{}. 
\item \macro{} \textit{}. 
\item \macro{} \textit{}. 

\item \macro{EFAULT} una stringa passata come parametro è fuori dello spazio
  di indirizzi del processo.
\item \macro{EACCESS} l'accesso al file non è consentito: o una delle
  directory del pathname non consente la ricerca, o il file non esiste e non
  si ha accesso in scrittura nella directory in cui lo si vuole creare.
\item \macro{ENAMETOOLONG} si è indicato un pathname troppo lungo.
\item \macro{ENOTDIR} un componente del pathname non è una directory.
\item \macro{ENOMEM} il kernel non ha a disposizione memoria sufficiente a
  completare l'operazione. 
\item \macro{EMLINK} ci sono troppi link al file (il numero massimo è
  specificato dalla variabile \macro{LINK\_MAX}, vedi
  \secref{sec:xxx_limits}).
\item \macro{ELOOP} ci sono troppi link simbolici nella risoluzione di un
  pathname.
\item \macro{ENOSPC} la directory in cui si vuole creare il link non ha
  spazio per ulteriori voci.
\item \macro{EROFS} il file risiede su un filesystem read-only.

\end{description}

\section{Gli errori dei processi}
\label{sec:err_proc_errors}

In questa sezione riassumeremo gli errori restituiti dalle funzioni di
libreria che operano sui 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{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
  caso è necessario ripetere la chiamata alla funzione. 
\item \macro{E2BIG} \textit{Argument list too long}. Lista degli argomenti
  troppo lunga: è una condizione prevista da POSIX quando la lista degli
  argomenti passata ad una delle funzioni \func{exec} occupa troppa memoria,
  non può mai accadere in GNU/Linux.
\item \macro{} \textit{}. 
\item \macro{} \textit{}. 
\item \macro{} \textit{}. 

\end{description}

