From: Simone Piccardi Date: Tue, 14 Aug 2001 21:13:40 +0000 (+0000) Subject: Inseriti i codici di errore. X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=commitdiff_plain;h=68f626be4f8d5c0816b9b552f744f05f0d72c8dc;p=gapil.git Inseriti i codici di errore. --- diff --git a/errors.tex b/errors.tex index 0c1cd6a..e5f9439 100644 --- a/errors.tex +++ b/errors.tex @@ -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{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{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{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{}. @@ -56,23 +204,6 @@ libreria che operano sui file. \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} @@ -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. -\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} + diff --git a/filedir.tex b/filedir.tex index 940c4bb..b7192d5 100644 --- a/filedir.tex +++ b/filedir.tex @@ -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 -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 -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 @@ -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. -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 -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 -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 @@ -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 -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 -\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 -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 @@ -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} -$ 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 -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} @@ -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. - + 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} - 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 @@ -450,38 +454,23 @@ il valore da fornire sarebbe $4755$. \hline \hline \macro{S\_ISUID} & 04000 & set user ID \\ - \macro{S\_ISGID} & 02000 & set group ID \\ - \macro{S\_ISVTX} & 01000 & sticky bit \\ - \hline \macro{S\_IRWXU} & 00700 & l'utente ha tutti i permessi \\ - \macro{S\_IRUSR} & 00400 & l'utente ha il permesso di lettura \\ - \macro{S\_IWUSR} & 00200 & l'utente ha il permesso di scrittura \\ - \macro{S\_IXUSR} & 00100 & l'utente ha il permesso di esecuzione \\ - \hline \macro{S\_IRWXG} & 00070 & il gruppo ha tutti i permessi \\ - \macro{S\_IRGRP} & 00040 & il gruppo ha il permesso di lettura \\ - \macro{S\_IWGRP} & 00020 & il gruppo ha il permesso di scrittura \\ - \macro{S\_IXGRP} & 00010 & il gruppo ha il permesso di esecuzione \\ - \hline \macro{S\_IRWXO} & 00007 & gli altri hanno tutti i permessi \\ - \macro{S\_IROTH} & 00004 & gli altri hanno il permesso di lettura \\ - \macro{S\_IWOTH} & 00002 & gli altri hanno il permesso di scrittura \\ - \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.} @@ -509,10 +498,10 @@ particolare: 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. @@ -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 -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} @@ -584,12 +573,12 @@ sono tre e i loro prototipi sono i seguenti: \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 @@ -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 -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 -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} @@ -653,9 +643,9 @@ i seguenti: 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