Inseriti i codici di errore.
authorSimone Piccardi <piccardi@gnulinux.it>
Tue, 14 Aug 2001 21:13:40 +0000 (21:13 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Tue, 14 Aug 2001 21:13:40 +0000 (21:13 +0000)
errors.tex
filedir.tex

index 0c1cd6af64a7c83c1f60a0409bf7d83393c6b0be..e5f9439f6b0194ef7a85ad82c1253ab6fee39a02 100644 (file)
@@ -28,27 +28,175 @@ libreria che operano sui file.
 \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{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{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{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{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{ENOEXEC} \textit{Invalid executable file format}. Il file non ha
+  un formato eseguibile, è un errore riscontrato dalle funzioni \finc{exec}.
 \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{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{ENOMEM} \textit{No memory available}. Il kernel non è in grado di
+  allocare ulteriore memoria per completare l'operazione richiesta.
+  
+\item \macro{EACCESS} \textit{Permission denied}. Permesso negato: l'accesso
+  al file non è consentito: i permessi del file o della directory non
+  consentono l'operazione.
+
+
+\item \macro{EXDEV} \textit{Cross-device link}. 
+\item \macro{ENOTBLK} \textit{}. 
+\item \macro{EBUSY} \textit{Resource busy}. 
+\item \macro{EEXIST} \textit{File exists}. 
+\item \macro{ENODEV} \textit{No such device}. 
+\item \macro{ENOTDIR} \textit{Not a directory}.  un componente del pathname non è una directory.
+
+\item \macro{EISDIR} \textit{Is a directory}. 
+\item \macro{EINVAL} \textit{Invalid argument}. 
+\item \macro{EMFILE} \textit{Too many open files}. 
+\item \macro{ENFILE} \textit{File table overflow}. 
+\item \macro{ENOTTY} \textit{Not a terminal}. 
+\item \macro{ETXTBSY} \textit{}. 
+\item \macro{EFBIG} \textit{File too big}. 
+
+\item \macro{ENOSPC} \textit{No space left on device}. la directory in cui si
+  vuole creare il link non ha spazio per ulteriori voci.
+
+\item \macro{ESPIPE} \textit{Invalid seek operation}. 
+\item \macro{EROFS} \textit{}.  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}).
 
 
+\item \macro{EPIPE} \textit{Broken pipe}. 
+\item \macro{EDOM} \textit{Domain error}. 
+\item \macro{ERANGE} \textit{Range error}. 
+\item \macro{EAGAIN} \textit{Resource temporarily unavailable}. 
+\item \macro{EWOULDBLOCK} \textit{}. 
+\item \macro{EINPROGRESS} \textit{}. 
+\item \macro{EALREADY} \textit{}. 
+\item \macro{ENOTSOCK} \textit{}. 
+\item \macro{EMSGSIZE} \textit{}. 
+\item \macro{EALREADY} \textit{}. 
+\item \macro{ENOTSOCK} \textit{}. 
+\item \macro{EMSGSIZE} \textit{}. 
+\item \macro{EPROTOTYPE} \textit{}. 
+\item \macro{ENOPROTOOPT} \textit{}. 
+\item \macro{EPROTONOSUPPORT} \textit{}. 
+\item \macro{ESOCKTNOSUPPORT} \textit{}. 
+\item \macro{EOPNOTSUPP} \textit{}. 
+\item \macro{EPFNOSUPPORT} \textit{}. 
+\item \macro{EAFNOSUPPORT} \textit{}. 
+\item \macro{EADDRINUSE} \textit{}. 
+\item \macro{EADDRNOTAVAIL} \textit{}. 
+\item \macro{ENETDOWN} \textit{}. 
+\item \macro{ENETUNREACH} \textit{}. 
+\item \macro{ENETRESET} \textit{}. 
+\item \macro{ECONNABORTED} \textit{}. 
+\item \macro{ECONNRESET} \textit{}. 
+\item \macro{ENOBUFS} \textit{}. 
+\item \macro{EISCONN} \textit{}. 
+\item \macro{ENOTCONN} \textit{}. 
+\item \macro{EDESTADDRREQ} \textit{}. 
+\item \macro{ESHUTDOWN} \textit{}. 
+\item \macro{ETOOMANYREFS} \textit{}. 
+\item \macro{ETIMEDOUT} \textit{}. 
+\item \macro{ECONNREFUSED} \textit{}. 
 
 
-\item \macro{} \textit{}. 
+\item \macro{ELOOP} ci sono troppi link simbolici nella risoluzione di un
+  pathname.
+
+\item \macro{ENAMETOOLONG} si è indicato un pathname troppo lungo.
+
+\item \macro{EHOSTDOWN} \textit{}. 
+\item \macro{EHOSTUNREACH} \textit{}. 
+\item \macro{ENOTEMPTY} \textit{}. 
+\item \macro{EPROCLIM} \textit{}. 
+\item \macro{EUSERS} \textit{}. 
+\item \macro{EDQUOT} \textit{}. 
+\item \macro{ESTALE} \textit{}. 
+\item \macro{EREMOTE} \textit{}. 
+\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{}. 
+\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{}. 
+\item \macro{EIDRM} \textit{}. 
+\item \macro{EMULTIHOP} \textit{}. 
+\item \macro{ENODATA} \textit{}. 
+\item \macro{ENOLINK} \textit{}. 
+\item \macro{ENOMSG} \textit{}. 
+\item \macro{ENOSR} \textit{}. 
+\item \macro{ENOSTR} \textit{}. 
+\item \macro{EOVERFLOW} \textit{}. 
+\item \macro{EPROTO} \textit{}. 
+\item \macro{ETIME} \textit{}. 
+
+
+\section{Errori del kernel}
+\label{sec:err_kernel_err}
+
+
+\item \macro{ERESTART} \textit{}. 
+\item \macro{ECHRNG} \textit{}. 
+\item \macro{EL2NSYNC} \textit{}. 
+\item \macro{EL3HLT} \textit{}. 
+\item \macro{EL3RST} \textit{}. 
+\item \macro{ELNRNG} \textit{}. 
+\item \macro{EUNATCH} \textit{}. 
+\item \macro{ENOCSI} \textit{}. 
+\item \macro{EL2HLT} \textit{}. 
+\item \macro{EBADE} \textit{}. 
+\item \macro{EBADR} \textit{}. 
+\item \macro{EXFULL} \textit{}. 
+\item \macro{ENOANO} \textit{}. 
+\item \macro{EBADRQC} \textit{}. 
+\item \macro{EBADSLT} \textit{}. 
+\item \macro{EDEADLOCK} \textit{}. 
+\item \macro{EBFONT} \textit{}. 
+\item \macro{ENONET} \textit{}. 
+\item \macro{ENOPKG} \textit{}. 
+\item \macro{EADV} \textit{}. 
+\item \macro{ESRMNT} \textit{}. 
+\item \macro{ECOMM} \textit{}. 
+\item \macro{EDOTDOT} \textit{}. 
+\item \macro{ENOTUNIQ} \textit{}. 
+\item \macro{EBADFD} \textit{}. 
+\item \macro{EREMCHG} \textit{}. 
+\item \macro{ELIBACC} \textit{}. 
+\item \macro{ELIBBAD} \textit{}. 
+\item \macro{ELIBSCN} \textit{}. 
+\item \macro{ELIBMAX} \textit{}. 
+\item \macro{ELIBEXEC} \textit{}. 
+\item \macro{ESTRPIPE} \textit{}. 
+\item \macro{EUCLEAN} \textit{}. 
+\item \macro{ENAVAIL} \textit{}. 
+\item \macro{EISNAM} \textit{}. 
+\item \macro{EREMOTEIO} \textit{}. 
+\item \macro{ENOMEDIUM} \textit{}. 
+\item \macro{EMEDIUMTYPE} \textit{}. 
 \item \macro{} \textit{}. 
 \item \macro{} \textit{}. 
 \item \macro{} \textit{}. 
 \item \macro{} \textit{}. 
 \item \macro{} \textit{}. 
 \item \macro{} \textit{}. 
@@ -56,23 +204,6 @@ libreria che operano sui file.
 \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}
 
 
 \end{description}
 
@@ -94,9 +225,17 @@ libreria che operano sui processi.
   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.
   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{}. 
+\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{EDEADLK} \textit{Deadlock avoided}. L'allocazione di una risorsa
+  avrebbe causato un deadlock. Non sempre il sistema è in grado di riconoscere
+  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
+  provova.
+
 
 \end{description}
 
 
 \end{description}
 
+
index 940c4bbdb313a8bad2a3ccbcaa8d582990862937..b7192d5e16826717298b844964f100f8716f5865 100644 (file)
@@ -122,14 +122,15 @@ per poter troncare il file con l'opzione \macro{O\_TRUNC}.
 Non si può creare un file fintanto che non si disponga del permesso di
 esecuzione e di quello di scrittura per la directory di destinazione; gli
 stessi permessi occorrono per cancellare un file da una directory (si ricordi
 Non si può creare un file fintanto che non si disponga del permesso di
 esecuzione e di quello di scrittura per la directory di destinazione; gli
 stessi permessi occorrono per cancellare un file da una directory (si ricordi
-che questo non implica necessariamente la rimozione fisica del file), non è
-necessario nessun tipo di permesso per il file stesso (infatti esso non viene
-toccato, viene solo modificato il contenuto della directory, rimuovendo la
-voce che ad esso fa rifermento).
+che questo non implica necessariamente la rimozione del contenuto del file dal
+disco), non è necessario nessun tipo di permesso per il file stesso (infatti
+esso non viene toccato, viene solo modificato il contenuto della directory,
+rimuovendo la voce che ad esso fa rifermento).
 
 Per poter eseguire un file (che sia un programma compilato od uno script di
 
 Per poter eseguire un file (che sia un programma compilato od uno script di
-shell), occorre il permesso di esecuzione per il medesimo, inoltre solo i file
-regolari possono essere eseguiti. 
+shell, od un altro tipo di file eseguibile riconosciuto dal kernel), occorre
+avere il permesso di esecuzione, inoltre solo i file regolari possono essere
+eseguiti.
 
 I permessi per un link simbolico sono ignorati, contano quelli del file a cui
 fa riferimento; per questo in genere \cmd{ls} per un link simbolico riporta
 
 I permessi per un link simbolico sono ignorati, contano quelli del file a cui
 fa riferimento; per questo in genere \cmd{ls} per un link simbolico riporta
@@ -219,28 +220,30 @@ l'\textit{effective user id} e l'\textit{effective group id} del nuovo
 processo all'uid e al gid del processo corrente, che normalmente corrispondono
 dell'utente con cui si è entrati nel sistema.
 
 processo all'uid e al gid del processo corrente, che normalmente corrispondono
 dell'utente con cui si è entrati nel sistema.
 
-Se però il file del programma (che ovviamente deve essere eseguibile) ha il
-bit \textsl{suid} settato, il kernel assegnerà come \textit{effective user id}
-al nuovo processo l'uid del proprietario del file al posto dell'uid del
-processo originario.  Avere il bit \textsl{sgid} settato ha lo stesso effetto
-sull'\textit{effective group id} del processo.
+Se però il file del programma\footnote{per motivi di sicurezza il kernel
+  ignora i bit \acr{suid} e \acr{sgid} per gli script eseguibili} (che
+ovviamente deve essere eseguibile) ha il bit \acr{suid} settato, il kernel
+assegnerà come \textit{effective user id} al nuovo processo l'uid del
+proprietario del file al posto dell'uid del processo originario.  Avere il bit
+\acr{sgid} settato ha lo stesso effetto sull'\textit{effective group id} del
+processo.
 
 I bit \textsl{suid} e \textsl{sgid} vengono usati per permettere agli utenti
 normali di usare programmi che abbisognano di privilegi speciali; l'esempio
 classico è il comando \cmd{passwd} che ha la necessità di modificare il file
 delle password, quest'ultimo ovviamente può essere scritto solo
 dall'amministratore, ma non è necessario chiamare l'amministratore per
 
 I bit \textsl{suid} e \textsl{sgid} vengono usati per permettere agli utenti
 normali di usare programmi che abbisognano di privilegi speciali; l'esempio
 classico è il comando \cmd{passwd} che ha la necessità di modificare il file
 delle password, quest'ultimo ovviamente può essere scritto solo
 dall'amministratore, ma non è necessario chiamare l'amministratore per
-cambiare la propria password. Infatti il comando \cmd{passwd} appartiene a root
-ma ha il suid bit settato per cui quando viene lanciato da un utente normale
-parte con i privilegi di root.
+cambiare la propria password. Infatti il comando \cmd{passwd} appartiene a
+root ma ha il bit suid settato per cui quando viene lanciato da un utente
+normale parte con i privilegi di root.
 
 Chiaramente avere un processo che ha privilegi superiori a quelli che avrebbe
 normalmente l'utente che lo ha lanciato comporta vari rischi, e questo tipo di
 
 Chiaramente avere un processo che ha privilegi superiori a quelli che avrebbe
 normalmente l'utente che lo ha lanciato comporta vari rischi, e questo tipo di
-programmi devono essere scritti accuratamente (torneremo sull'argomento in
-\secref{sec:prochand_perms}) per evitare che possano essere usati per
-guadagnare privilegi non consentiti.
+programmi devono essere scritti accuratamente per evitare che possano essere
+usati per guadagnare privilegi non consentiti (torneremo sull'argomento in
+\secref{sec:prochand_perms}).
 
 
-La presenza dei bit \textsl{suid} e \textsl{sgid} su un file può essere
+La presenza dei bit \acr{suid} e \acr{sgid} su un file può essere
 rilevata con il comando \cmd{ls -l}, in tal caso comparirà la lettera \cmd{s}
 al posto della \cmd{x} in corrispondenza dei permessi di utente o gruppo. La
 stessa lettera \cmd{s} può essere usata nel comando \cmd{chmod} per settare
 rilevata con il comando \cmd{ls -l}, in tal caso comparirà la lettera \cmd{s}
 al posto della \cmd{x} in corrispondenza dei permessi di utente o gruppo. La
 stessa lettera \cmd{s} può essere usata nel comando \cmd{chmod} per settare
@@ -276,21 +279,22 @@ L'effetto di questo bit era che il segmento di testo del programma (si veda
 prima volta che questo veniva lanciato, e vi permaneva fino al riavvio della
 mecchina (da questo il nome di \textsl{sticky bit}); essendo la swap un file
 continuo indicizzato direttamente in questo modo si poteva risparmiare in
 prima volta che questo veniva lanciato, e vi permaneva fino al riavvio della
 mecchina (da questo il nome di \textsl{sticky bit}); essendo la swap un file
 continuo indicizzato direttamente in questo modo si poteva risparmiare in
-tempo di caricamento rispetto alla ricerca del file su disco.
+tempo di caricamento rispetto alla ricerca del file su disco. Lo
+\textsl{sticky bit} è indicato usando la lettera \cmd{t} al posto della
+\cmd{x} nei permessi per gli altri.
 
 Ovviamente per evitare che gli utenti potessero intasare la swap solo
 l'amministratore era in grado di settare questo bit, che venne chiamato anche
 
 Ovviamente per evitare che gli utenti potessero intasare la swap solo
 l'amministratore era in grado di settare questo bit, che venne chiamato anche
-\textit{saved text bit}, da cui deriva il nome della costante. Le attuali
-implementazioni di memoria virtuale e filesystem rendono sostanzialmente
-inutile questo procedimento. Lo \textsl{sticky bit} è indicato attraverso la
-lettera \cmd{t} al posto della \cmd{x} nei permessi per gli altri.
+con il nome di \textit{saved text bit}, da cui deriva quello della costante.
+Le attuali implementazioni di memoria virtuale e filesystem rendono
+sostanzialmente inutile questo procedimento.
 
 Benché ormai non venga più utilizzato per i file, lo \textsl{sticky bit} ha
 
 Benché ormai non venga più utilizzato per i file, lo \textsl{sticky bit} ha
-assunto un uso corrente per le directory\footnote{lo \textsl{sticky bit} è una
-  estensione non definita nello standard POSIX, Linux però la supporta, così
-  come BSD e SVR4}, in questo caso se il bit è settato un file potrà essere
-rimosso dalla directory soltanto se l'utente ha il permesso di scrittura ed
-inoltre è vera una delle seguenti condizioni:
+assunto un uso corrente per le directory\footnote{lo \textsl{sticky bit} per
+  le directory è una estensione non definita nello standard POSIX, Linux però
+  la supporta, così come BSD e SVR4}, in questo caso se il bit è settato un
+file potrà essere rimosso dalla directory soltanto se l'utente ha il permesso
+di scrittura ed inoltre è vera una delle seguenti condizioni:
 \begin{itemize}
 \item l'utente è proprietario del file
 \item l'utente è proprietario della directory
 \begin{itemize}
 \item l'utente è proprietario del file
 \item l'utente è proprietario della directory
@@ -299,13 +303,13 @@ inoltre 
 un classico esempio di directory che ha questo bit settato è \file{/tmp}, i
 permessi infatti di solito sono settati come:
 \begin{verbatim}
 un classico esempio di directory che ha questo bit settato è \file{/tmp}, i
 permessi infatti di solito sono settati come:
 \begin{verbatim}
-$ ls -l /tmp
+$ ls -ld /tmp
 drwxrwxrwt    6 root     root         1024 Aug 10 01:03 /tmp
 \end{verbatim}%$
 in questo modo chiunque può leggere, scrivere ed eseguire i file temporanei
 ivi memorizzati, sia crearne di nuovi, ma solo l'utente che ha creato un file
 drwxrwxrwt    6 root     root         1024 Aug 10 01:03 /tmp
 \end{verbatim}%$
 in questo modo chiunque può leggere, scrivere ed eseguire i file temporanei
 ivi memorizzati, sia crearne di nuovi, ma solo l'utente che ha creato un file
-nella directory potrà cancellarlo o rinominarlo, evitando così che utente
-possa, più o meno consapevolemnte, cancellare i file degli altri.
+nella directory potrà cancellarlo o rinominarlo, così si può evitare che un
+utente possa, più o meno consapevolemnte, cancellare i file degli altri.
 
 
 \subsection{La titolarità di nuovi file e directory}
 
 
 \subsection{La titolarità di nuovi file e directory}
@@ -419,17 +423,17 @@ i cui prototipi sono:
   
   \funcdecl{int fchmod(int fd, mode\_t mode)} Analoga alla precedente, ma usa
   il file descriptor \var{fd} per indicare il file.
   
   \funcdecl{int fchmod(int fd, mode\_t mode)} Analoga alla precedente, ma usa
   il file descriptor \var{fd} per indicare il file.
-
+  
   Le funzioni restituiscono zero in caso di successo e -1 per un errore, in
   Le funzioni restituiscono zero in caso di successo e -1 per un errore, in
-  caso di errore \texttt{errno} viene settato ai valori:
+  caso di errore \texttt{errno} può assumere i valori:
   \begin{errlist}
   \item \macro{EPERM} L'\textit{effective user id} non corrisponde a quello
     del proprietario del file o non è zero.
   \end{errlist}
   \begin{errlist}
   \item \macro{EPERM} L'\textit{effective user id} non corrisponde a quello
     del proprietario del file o non è zero.
   \end{errlist}
-  Oltre a questi entrambe restituiscono gli errori \macro{EROFS} e
-  \macro{EIO}; \func{chmod} restituisce anche \macro{EFAULT},
-  \macro{ENAMETOOLONG}, \macro{ENOENT}, \macro{ENOMEM}, \macro{ENOTDIR},
-  \macro{EACCES}, \macro{ELOOP}; \func{fchmod} anche \macro{EBADF}.
+  ed inoltre \macro{EROFS} e \macro{EIO}; \func{chmod} restituisce anche
+  \macro{EFAULT}, \macro{ENAMETOOLONG}, \macro{ENOENT}, \macro{ENOMEM},
+  \macro{ENOTDIR}, \macro{EACCES}, \macro{ELOOP}; \func{fchmod} anche
+  \macro{EBADF}.
 \end{functions}
 
 I valori possibili per \var{mode} sono indicati in \ntab. I valori possono
 \end{functions}
 
 I valori possibili per \var{mode} sono indicati in \ntab. I valori possono
@@ -450,38 +454,23 @@ il valore da fornire sarebbe $4755$.
     \hline
     \hline
     \macro{S\_ISUID} & 04000 & set user ID \\
     \hline
     \hline
     \macro{S\_ISUID} & 04000 & set user ID \\
-
     \macro{S\_ISGID} & 02000 & set group ID \\
     \macro{S\_ISGID} & 02000 & set group ID \\
-    
     \macro{S\_ISVTX} & 01000 & sticky bit \\
     \macro{S\_ISVTX} & 01000 & sticky bit \\
-
     \hline
     \macro{S\_IRWXU} & 00700 & l'utente ha tutti i permessi \\
     \hline
     \macro{S\_IRWXU} & 00700 & l'utente ha tutti i permessi \\
-
     \macro{S\_IRUSR} & 00400 & l'utente ha il permesso di lettura  \\
     \macro{S\_IRUSR} & 00400 & l'utente ha il permesso di lettura  \\
-
     \macro{S\_IWUSR} & 00200 & l'utente ha il permesso di scrittura \\
     \macro{S\_IWUSR} & 00200 & l'utente ha il permesso di scrittura \\
-
     \macro{S\_IXUSR} & 00100 & l'utente ha il permesso di esecuzione \\
     \macro{S\_IXUSR} & 00100 & l'utente ha il permesso di esecuzione \\
-
     \hline
     \macro{S\_IRWXG} & 00070 & il gruppo ha tutti i permessi  \\
     \hline
     \macro{S\_IRWXG} & 00070 & il gruppo ha tutti i permessi  \\
-
     \macro{S\_IRGRP} & 00040 & il gruppo ha il permesso di lettura  \\
     \macro{S\_IRGRP} & 00040 & il gruppo ha il permesso di lettura  \\
-
     \macro{S\_IWGRP} & 00020 & il gruppo ha il permesso di scrittura \\
     \macro{S\_IWGRP} & 00020 & il gruppo ha il permesso di scrittura \\
-
     \macro{S\_IXGRP} & 00010 & il gruppo ha il permesso di esecuzione \\
     \macro{S\_IXGRP} & 00010 & il gruppo ha il permesso di esecuzione \\
-
     \hline
     \macro{S\_IRWXO} & 00007 & gli altri hanno tutti i permessi \\
     \hline
     \macro{S\_IRWXO} & 00007 & gli altri hanno tutti i permessi \\
-
     \macro{S\_IROTH} & 00004 & gli altri hanno il permesso di lettura  \\
     \macro{S\_IROTH} & 00004 & gli altri hanno il permesso di lettura  \\
-
     \macro{S\_IWOTH} & 00002 & gli altri hanno il permesso di scrittura \\
     \macro{S\_IWOTH} & 00002 & gli altri hanno il permesso di scrittura \\
-
     \macro{S\_IXOTH} & 00001 & gli altri hanno il permesso di esecuzione \\
     \macro{S\_IXOTH} & 00001 & gli altri hanno il permesso di esecuzione \\
-
     \hline
   \end{tabular}
   \caption{I valori delle costanti usate per indicare i permessi dei file.}
     \hline
   \end{tabular}
   \caption{I valori delle costanti usate per indicare i permessi dei file.}
@@ -509,10 +498,10 @@ particolare:
 
 Per alcuni filesystem\footnote{il filesystem \textsl{ext2} supporta questa
   caratteristica, che è mutuata da BSD.} è inoltre prevista una ulteriore
 
 Per alcuni filesystem\footnote{il filesystem \textsl{ext2} supporta questa
   caratteristica, che è mutuata da BSD.} è inoltre prevista una ulteriore
-misura di sicurezza, volta ad scongiurare l'abuso dei bit \textsl{suid} e
-\textsl{sgid}; essa consiste nel cancellare automaticamente questi bit qualora
-un processo che non appartenga all'amministratore scriva su un file. In questo
-modo anche se un utente malizioso scopre un file \textsl{suid} su cui può
+misura di sicurezza, volta ad scongiurare l'abuso dei bit \acr{suid} e
+\acr{sgid}; essa consiste nel cancellare automaticamente questi bit qualora un
+processo che non appartenga all'amministratore scriva su un file. In questo
+modo anche se un utente malizioso scopre un file \acr{suid} su cui può
 scrivere, un eventuale modifica comporterà la perdita di ogni ulteriore
 privilegio.
 
 scrivere, un eventuale modifica comporterà la perdita di ogni ulteriore
 privilegio.
 
@@ -550,9 +539,9 @@ possibile cancellare automaticamente i permessi non voluti, senza doverlo fare
 esplicitamente.
 
 In genere il valore di \func{umask} viene stabilito una volta per tutte al
 esplicitamente.
 
 In genere il valore di \func{umask} viene stabilito una volta per tutte al
-login, e di norma gli utenti non hanno motivi per modificarlo. Se però si
-vuole che un processo possa creare un file che chiunque possa leggere allora
-occorrerà cambiare il valore di \func{umask}.
+login a $022$, e di norma gli utenti non hanno motivi per modificarlo. Se però
+si vuole che un processo possa creare un file che chiunque possa leggere
+allora occorrerà cambiare il valore di \func{umask}.
 
 \subsection{Le funzioni \texttt{chown}, \texttt{fchown} e \texttt{lchown}}
 \label{sec:file_chown}
 
 \subsection{Le funzioni \texttt{chown}, \texttt{fchown} e \texttt{lchown}}
 \label{sec:file_chown}
@@ -584,12 +573,12 @@ sono tre e i loro prototipi sono i seguenti:
   \macro{EACCES}, \macro{ELOOP}; \func{fchown} anche \macro{EBADF}.
 \end{functions}
 
   \macro{EACCES}, \macro{ELOOP}; \func{fchown} anche \macro{EBADF}.
 \end{functions}
 
-Soltanto l'amministratore può cambiare il proprietario di un file, seguendo la
-semantica di BSD che non consente agli utenti di assegnare i loro file ad
-altri (per evitare eventuali aggiramenti delle quote). L'amministratore può
-cambiare il gruppo di un file, il proprietario può cambiare il gruppo dei file
-che gli appartengono solo se il nuovo gruppo è il suo gruppo primario o uno
-dei gruppi a cui appartiene.
+In Linux soltanto l'amministratore può cambiare il proprietario di un file,
+seguendo la semantica di BSD che non consente agli utenti di assegnare i loro
+file ad altri (per evitare eventuali aggiramenti delle quote).
+L'amministratore può cambiare il gruppo di un file, il proprietario può
+cambiare il gruppo dei file che gli appartengono solo se il nuovo gruppo è il
+suo gruppo primario o uno dei gruppi a cui appartiene.
 
 La funzione \func{chown} segue i link simbolici, per operare direttamente su
 in link simbolico si deve usare la funzione \func{lchown}\footnote{fino alla
 
 La funzione \func{chown} segue i link simbolici, per operare direttamente su
 in link simbolico si deve usare la funzione \func{lchown}\footnote{fino alla
@@ -623,18 +612,19 @@ generali relative alle caratteristiche di ciascun file, a partire dalle
 informazioni relative al controllo di accesso, sono mantenute nell'inode.
 
 Vedremo in questa sezione come sia possibile leggere tutte queste informazioni
 informazioni relative al controllo di accesso, sono mantenute nell'inode.
 
 Vedremo in questa sezione come sia possibile leggere tutte queste informazioni
-usando la funzione \texttt{stat}, esamineremo poi le varie funzioni che si
-possono per manipolare le restanti informazioni (avendo esaminato quelle per
-la gestione del controllo di accesso in \secref{sec:file_access_control}).
+usando la funzione \texttt{stat}, che permette l'accesso a tutti i dati
+memorizzati nell'inode; esamineremo poi le varie funzioni usate per manipolare
+tutte queste informazioni (eccetto quelle che riguardano la gestione del
+controllo di accesso, già trattate in in \secref{sec:file_access_control}).
 
 
 \subsection{Le funzioni \texttt{stat}, \texttt{fstat} e \texttt{lstat}}
 \label{sec:file_stat}
 
 La lettura delle informazioni relative ai file è fatta attraverso la famiglia
 
 
 \subsection{Le funzioni \texttt{stat}, \texttt{fstat} e \texttt{lstat}}
 \label{sec:file_stat}
 
 La lettura delle informazioni relative ai file è fatta attraverso la famiglia
-delle funzioni \func{stat}, che è la funzione che il comando \cmd{ls} usa
-per poter stampare tutti i dati dei files. I prototipi di queste funzioni sono
-i seguenti:
+delle funzioni \func{stat}; questa è la funzione che il comando \cmd{ls} usa
+per poter ottenere e mostrare tutti i dati dei files. I prototipi di queste
+funzioni sono i seguenti:
 \begin{functions}
   \headdecl{sys/types.h} 
   \headdecl{sys/stat.h} 
 \begin{functions}
   \headdecl{sys/types.h} 
   \headdecl{sys/stat.h} 
@@ -653,9 +643,9 @@ i seguenti:
   descriptor \var{filedes}.
   
   Le funzioni restituiscono zero in caso di successo e -1 per un errore, in
   descriptor \var{filedes}.
   
   Le funzioni restituiscono zero in caso di successo e -1 per un errore, in
-  caso di errore \texttt{errno} viene settato ai valori \macro{EACCESS},
-  \macro{EBADF}, \macro{ELOOP}, \macro{EFAULT}, \macro{ENOENT},
-  \macro{ENOTDIR}, \macro{ENOMEM}, \macro{ENAMETOOLONG}.
+  caso di errore \texttt{errno} può assumere uno dei valori: \macro{EBADF},
+  \macro{ENOENT}, \macro{ENOTDIR}, \macro{ELOOP}, \macro{EFAULT},
+  \macro{EACCESS}, \macro{ENOMEM}, \macro{ENAMETOOLONG}.
 \end{functions}
 
 La struttura \texttt{stat} è definita nell'header \texttt{sys/stat.h} e in
 \end{functions}
 
 La struttura \texttt{stat} è definita nell'header \texttt{sys/stat.h} e in