\bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
errore nel qual caso \var{errno} viene impostata ai valori:
\begin{errlist}
- \item[\errcode{EXDEV}] \param{oldpath} e \param{newpath} non sono sullo
- stesso filesystem.
+ \item[\errcode{EXDEV}] i file \param{oldpath} e \param{newpath} non sono
+ sullo stesso filesystem.
\item[\errcode{EPERM}] il filesystem che contiene \param{oldpath} e
\param{newpath} non supporta i link diretti o è una directory.
\item[\errcode{EEXIST}] un file (o una directory) con quel nome esiste di
\item[\errcode{EINVAL}] \param{newpath} contiene un prefisso di
\param{oldpath} o più in generale si è cercato di creare una directory come
sotto-directory di se stessa.
- \item[\errcode{ENOTDIR}] Uno dei componenti dei \itindex{pathname}
+ \item[\errcode{ENOTDIR}] uno dei componenti dei \itindex{pathname}
\textit{pathname} non è una directory o \param{oldpath} è una directory e
\param{newpath} esiste e non è una directory.
\end{errlist}
\itindex{pathname} \textit{pathname} relativo.
I permessi di accesso (vedi sez.~\ref{sec:file_access_control}) con cui la
-directory viene creata sono specificati dall'argomemto \param{mode}, i cui
+directory viene creata sono specificati dall'argomento \param{mode}, i cui
possibili valori sono riportati in tab.~\ref{tab:file_permission_const}; si
tenga presente che questi sono modificati dalla maschera di creazione dei file
(si veda sez.~\ref{sec:file_perm_management}). La titolarità della nuova
\bodydesc{La funzione restituisce zero in caso di successo e -1 per un
errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{EPERM}] Il filesystem non supporta la cancellazione di
+ \item[\errcode{EPERM}] il filesystem non supporta la cancellazione di
directory, oppure la directory che contiene \param{dirname} ha lo
\itindex{sticky~bit} \textit{sticky bit} impostato e l'user-ID effettivo
del processo non corrisponde al proprietario della directory.
- \item[\errcode{EACCES}] Non c'è il permesso di scrittura per la directory
+ \item[\errcode{EACCES}] non c'è il permesso di scrittura per la directory
che contiene la directory che si vuole cancellare, o non c'è il permesso
di attraversare (esecuzione) una delle directory specificate in
\param{dirname}.
- \item[\errcode{EBUSY}] La directory specificata è la directory di lavoro o la
+ \item[\errcode{EBUSY}] la directory specificata è la directory di lavoro o la
radice di qualche processo.
- \item[\errcode{ENOTEMPTY}] La directory non è vuota.
+ \item[\errcode{ENOTEMPTY}] la directory non è vuota.
\end{errlist}
ed inoltre anche \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT},
\errval{ENOTDIR}, \errval{ENOMEM}, \errval{ELOOP}, \errval{EROFS}.}
\bodydesc{La funzione restituisce zero in caso di successo e -1 per un
errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{EPERM}] Non si hanno privilegi sufficienti a creare l'inode, o
+ \item[\errcode{EPERM}] non si hanno privilegi sufficienti a creare l'inode, o
il filesystem su cui si è cercato di creare \param{pathname} non supporta
l'operazione.
- \item[\errcode{EINVAL}] Il valore di \param{mode} non indica un file, una
+ \item[\errcode{EINVAL}] il valore di \param{mode} non indica un file, una
fifo o un dispositivo.
\item[\errcode{EEXIST}] \param{pathname} esiste già o è un link simbolico.
\end{errlist}
\textbf{Valore} & \textbf{Tipo di file} \\
\hline
\hline
- \const{DT\_UNKNOWN} & tipo sconosciuto\\
- \const{DT\_REG} & file normale\\
- \const{DT\_DIR} & directory\\
- \const{DT\_FIFO} & fifo\\
- \const{DT\_SOCK} & socket\\
- \const{DT\_CHR} & dispositivo a caratteri\\
- \const{DT\_BLK} & dispositivo a blocchi\\
+ \const{DT\_UNKNOWN} & Tipo sconosciuto.\\
+ \const{DT\_REG} & File normale.\\
+ \const{DT\_DIR} & Directory.\\
+ \const{DT\_FIFO} & Fifo.\\
+ \const{DT\_SOCK} & Socket.\\
+ \const{DT\_CHR} & Dispositivo a caratteri.\\
+ \const{DT\_BLK} & Dispositivo a blocchi.\\
\hline
\end{tabular}
\caption{Costanti che indicano i vari tipi di file nel campo \var{d\_type}
\val{NULL} se fallisce, in quest'ultimo caso la variabile
\var{errno} è impostata con i seguenti codici di errore:
\begin{errlist}
- \item[\errcode{EINVAL}] L'argomento \param{size} è zero e \param{buffer} non
+ \item[\errcode{EINVAL}] l'argomento \param{size} è zero e \param{buffer} non
è nullo.
- \item[\errcode{ERANGE}] L'argomento \param{size} è più piccolo della
+ \item[\errcode{ERANGE}] l'argomento \param{size} è più piccolo della
lunghezza del \textit{pathname}.
- \item[\errcode{EACCES}] Manca il permesso di lettura o di ricerca su uno dei
+ \item[\errcode{EACCES}] manca il permesso di lettura o di ricerca su uno dei
componenti del \textit{pathname} (cioè su una delle directory superiori
alla corrente).
\end{errlist}}
\bodydesc{La funzione restituisce 0 in caso di successo e -1 per un errore,
nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{ENOTDIR}] Non si è specificata una directory.
- \item[\errcode{EACCES}] Manca il permesso di ricerca su uno dei componenti
+ \item[\errcode{ENOTDIR}] non si è specificata una directory.
+ \item[\errcode{EACCES}] manca il permesso di ricerca su uno dei componenti
di \param{path}.
\end{errlist}
ed inoltre \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT},
temporaneo in caso di successo e \val{NULL} in caso di errore, nel qual
caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale.
- \item[\errcode{EEXIST}] Non è stato possibile generare un nome univoco.
+ \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale.
+ \item[\errcode{EEXIST}] non è stato possibile generare un nome univoco.
\end{errlist}
ed inoltre \errval{EFAULT}, \errval{EMFILE}, \errval{ENFILE},
\errval{ENOSPC}, \errval{EROFS} e \errval{EACCES}.}
\textbf{Macro} & \textbf{Tipo del file} \\
\hline
\hline
- \macro{S\_ISREG(m)} & file regolare \\
- \macro{S\_ISDIR(m)} & directory \\
- \macro{S\_ISCHR(m)} & dispositivo a caratteri \\
- \macro{S\_ISBLK(m)} & dispositivo a blocchi\\
- \macro{S\_ISFIFO(m)} & fifo \\
- \macro{S\_ISLNK(m)} & link simbolico \\
- \macro{S\_ISSOCK(m)} & socket \\
+ \macro{S\_ISREG(m)} & File normale.\\
+ \macro{S\_ISDIR(m)} & Directory.\\
+ \macro{S\_ISCHR(m)} & Dispositivo a caratteri.\\
+ \macro{S\_ISBLK(m)} & Dispositivo a blocchi.\\
+ \macro{S\_ISFIFO(m)} & Fifo.\\
+ \macro{S\_ISLNK(m)} & Link simbolico.\\
+ \macro{S\_ISSOCK(m)} & Socket.\\
\hline
\end{tabular}
\caption{Macro per i tipi di file (definite in \texttt{sys/stat.h}).}
\textbf{Flag} & \textbf{Valore} & \textbf{Significato} \\
\hline
\hline
- \const{S\_IFMT} & 0170000 & maschera per i bit del tipo di file \\
- \const{S\_IFSOCK} & 0140000 & socket \\
- \const{S\_IFLNK} & 0120000 & link simbolico \\
- \const{S\_IFREG} & 0100000 & file regolare \\
- \const{S\_IFBLK} & 0060000 & dispositivo a blocchi \\
- \const{S\_IFDIR} & 0040000 & directory \\
- \const{S\_IFCHR} & 0020000 & dispositivo a caratteri \\
- \const{S\_IFIFO} & 0010000 & fifo \\
+ \const{S\_IFMT} & 0170000 & Maschera per i bit del tipo di file.\\
+ \const{S\_IFSOCK} & 0140000 & Socket.\\
+ \const{S\_IFLNK} & 0120000 & Link simbolico.\\
+ \const{S\_IFREG} & 0100000 & File regolare.\\
+ \const{S\_IFBLK} & 0060000 & Dispositivo a blocchi.\\
+ \const{S\_IFDIR} & 0040000 & Directory.\\
+ \const{S\_IFCHR} & 0020000 & Dispositivo a caratteri.\\
+ \const{S\_IFIFO} & 0010000 & Fifo.\\
\hline
- \const{S\_ISUID} & 0004000 & set UID bit \itindex{suid~bit} \\
- \const{S\_ISGID} & 0002000 & set GID bit \itindex{sgid~bit} \\
- \const{S\_ISVTX} & 0001000 & sticky bit \itindex{sticky~bit}\\
+ \const{S\_ISUID} & 0004000 & Set UID bit \itindex{suid~bit}.\\
+ \const{S\_ISGID} & 0002000 & Set GID bit \itindex{sgid~bit}.\\
+ \const{S\_ISVTX} & 0001000 & Sticky bit \itindex{sticky~bit}.\\
\hline
-% \const{S\_IRWXU} & 00700 & bitmask per i permessi del proprietario \\
- \const{S\_IRUSR} & 00400 & il proprietario ha permesso di lettura \\
- \const{S\_IWUSR} & 00200 & il proprietario ha permesso di scrittura \\
- \const{S\_IXUSR} & 00100 & il proprietario ha permesso di esecuzione\\
+% \const{S\_IRWXU} & 00700 & Bitmask per i permessi del proprietario.\\
+ \const{S\_IRUSR} & 00400 & Il proprietario ha permesso di lettura.\\
+ \const{S\_IWUSR} & 00200 & Il proprietario ha permesso di scrittura.\\
+ \const{S\_IXUSR} & 00100 & Il proprietario ha permesso di esecuzione.\\
\hline
-% \const{S\_IRWXG} & 00070 & bitmask per i permessi del gruppo \\
- \const{S\_IRGRP} & 00040 & il gruppo ha permesso di lettura \\
- \const{S\_IWGRP} & 00020 & il gruppo ha permesso di scrittura \\
- \const{S\_IXGRP} & 00010 & il gruppo ha permesso di esecuzione \\
+% \const{S\_IRWXG} & 00070 & Bitmask per i permessi del gruppo.\\
+ \const{S\_IRGRP} & 00040 & Il gruppo ha permesso di lettura.\\
+ \const{S\_IWGRP} & 00020 & Il gruppo ha permesso di scrittura.\\
+ \const{S\_IXGRP} & 00010 & Il gruppo ha permesso di esecuzione.\\
\hline
-% \const{S\_IRWXO} & 00007 & bitmask per i permessi di tutti gli altri\\
- \const{S\_IROTH} & 00004 & gli altri hanno permesso di lettura \\
- \const{S\_IWOTH} & 00002 & gli altri hanno permesso di esecuzione \\
- \const{S\_IXOTH} & 00001 & gli altri hanno permesso di esecuzione \\
+% \const{S\_IRWXO} & 00007 & Bitmask per i permessi di tutti gli altri\\
+ \const{S\_IROTH} & 00004 & Gli altri hanno permesso di lettura.\\
+ \const{S\_IWOTH} & 00002 & Gli altri hanno permesso di esecuzione.\\
+ \const{S\_IXOTH} & 00001 & Gli altri hanno permesso di esecuzione.\\
\hline
\end{tabular}
\caption{Costanti per l'identificazione dei vari bit che compongono il campo
\item[\errcode{EACCES}] il file non ha permesso di scrittura o non si ha il
permesso di esecuzione una delle directory del \itindex{pathname}
\textit{pathname}.
- \item[\errcode{ETXTBSY}] Il file è un programma in esecuzione.
+ \item[\errcode{ETXTBSY}] il file è un programma in esecuzione.
\end{errlist}
ed anche \errval{ENOTDIR}, \errval{ENAMETOOLONG}, \errval{ENOENT},
\errval{EROFS}, \errval{EIO}, \errval{EFAULT}, \errval{ELOOP}.}
& \textbf{Opzione di \cmd{ls}} \\
\hline
\hline
- \var{st\_atime}& ultimo accesso ai dati del file &\func{read},
- \func{utime} & \cmd{-u}\\
- \var{st\_mtime}& ultima modifica ai dati del file &\func{write},
- \func{utime} & default\\
- \var{st\_ctime}& ultima modifica ai dati dell'inode&\func{chmod},
- \func{utime} & \cmd{-c} \\
+ \var{st\_atime}& ultimo accesso ai dati del file &
+ \func{read}, \func{utime} & \cmd{-u}\\
+ \var{st\_mtime}& ultima modifica ai dati del file &
+ \func{write}, \func{utime} & default\\
+ \var{st\_ctime}& ultima modifica ai dati dell'inode &
+ \func{chmod}, \func{utime} & \cmd{-c}\\
\hline
\end{tabular}
\caption{I tre tempi associati a ciascun file.}
\hline
\hline
\func{chmod}, \func{fchmod}
- & -- & -- &$\bullet$& -- & -- & -- & \\
+ & -- & -- &$\bullet$& -- & -- & -- &\\
\func{chown}, \func{fchown}
- & -- & -- &$\bullet$& -- & -- & -- & \\
+ & -- & -- &$\bullet$& -- & -- & -- &\\
+ \func{creat}
+ &$\bullet$&$\bullet$&$\bullet$& -- &$\bullet$&$\bullet$&
+ con \const{O\_CREATE} \\
\func{creat}
- &$\bullet$&$\bullet$&$\bullet$& -- &$\bullet$&$\bullet$& con
- \const{O\_CREATE} \\ \func{creat}
- & -- &$\bullet$&$\bullet$& -- &$\bullet$&$\bullet$&
- con \const{O\_TRUNC} \\ \func{exec}
- &$\bullet$& -- & -- & -- & -- & -- & \\
+ & -- &$\bullet$&$\bullet$& -- &$\bullet$&$\bullet$&
+ con \const{O\_TRUNC} \\
+ \func{exec}
+ &$\bullet$& -- & -- & -- & -- & -- &\\
\func{lchown}
- & -- & -- &$\bullet$& -- & -- & -- & \\
+ & -- & -- &$\bullet$& -- & -- & -- &\\
\func{link}
- & -- & -- &$\bullet$& -- &$\bullet$&$\bullet$& \\
+ & -- & -- &$\bullet$& -- &$\bullet$&$\bullet$&\\
\func{mkdir}
- &$\bullet$&$\bullet$&$\bullet$& -- &$\bullet$&$\bullet$& \\
+ &$\bullet$&$\bullet$&$\bullet$& -- &$\bullet$&$\bullet$&\\
\func{mkfifo}
- &$\bullet$&$\bullet$&$\bullet$& -- &$\bullet$&$\bullet$& \\
+ &$\bullet$&$\bullet$&$\bullet$& -- &$\bullet$&$\bullet$&\\
\func{open}
- &$\bullet$&$\bullet$&$\bullet$& -- &$\bullet$&$\bullet$& con
- \const{O\_CREATE} \\ \func{open}
- & -- &$\bullet$&$\bullet$& -- & -- & -- & con
- \const{O\_TRUNC} \\ \func{pipe}
- &$\bullet$&$\bullet$&$\bullet$& -- & -- & -- & \\
+ &$\bullet$&$\bullet$&$\bullet$& -- &$\bullet$&$\bullet$&
+ con \const{O\_CREATE} \\
+ \func{open}
+ & -- &$\bullet$&$\bullet$& -- & -- & -- &
+ con \const{O\_TRUNC} \\
+ \func{pipe}
+ &$\bullet$&$\bullet$&$\bullet$& -- & -- & -- &\\
\func{read}
- &$\bullet$& -- & -- & -- & -- & -- & \\
+ &$\bullet$& -- & -- & -- & -- & -- &\\
+ \func{remove}
+ & -- & -- &$\bullet$& -- &$\bullet$&$\bullet$&
+ se esegue \func{unlink}\\
\func{remove}
- & -- & -- &$\bullet$& -- &$\bullet$&$\bullet$& se esegue
- \func{unlink}\\ \func{remove}
- & -- & -- & -- & -- &$\bullet$&$\bullet$& se esegue
- \func{rmdir}\\ \func{rename}
- & -- & -- &$\bullet$& -- &$\bullet$&$\bullet$& per entrambi
- gli argomenti\\ \func{rmdir}
- & -- & -- & -- & -- &$\bullet$&$\bullet$& \\
+ & -- & -- & -- & -- &$\bullet$&$\bullet$&
+ se esegue \func{rmdir}\\
+ \func{rename}
+ & -- & -- &$\bullet$& -- &$\bullet$&$\bullet$&
+ per entrambi gli argomenti\\
+ \func{rmdir}
+ & -- & -- & -- & -- &$\bullet$&$\bullet$&\\
\func{truncate}, \func{ftruncate}
- & -- &$\bullet$&$\bullet$& -- & -- & -- & \\
+ & -- &$\bullet$&$\bullet$& -- & -- & -- &\\
\func{unlink}
- & -- & -- &$\bullet$& -- &$\bullet$&$\bullet$& \\
+ & -- & -- &$\bullet$& -- &$\bullet$&$\bullet$&\\
\func{utime}
- &$\bullet$&$\bullet$&$\bullet$& -- & -- & -- & \\
+ &$\bullet$&$\bullet$&$\bullet$& -- & -- & -- &\\
\func{write}
- & -- &$\bullet$&$\bullet$& -- & -- & -- & \\
+ & -- &$\bullet$&$\bullet$& -- & -- & -- &\\
\hline
\end{tabular}
\caption{Prospetto dei cambiamenti effettuati sui tempi di ultimo
\textbf{\var{st\_mode}} bit & \textbf{Significato} \\
\hline
\hline
- \const{S\_IRUSR} & \textit{user-read}, l'utente può leggere \\
- \const{S\_IWUSR} & \textit{user-write}, l'utente può scrivere \\
- \const{S\_IXUSR} & \textit{user-execute}, l'utente può eseguire \\
- \hline
- \const{S\_IRGRP} & \textit{group-read}, il gruppo può leggere \\
- \const{S\_IWGRP} & \textit{group-write}, il gruppo può scrivere \\
- \const{S\_IXGRP} & \textit{group-execute}, il gruppo può eseguire\\
- \hline
- \const{S\_IROTH} & \textit{other-read}, tutti possono leggere \\
- \const{S\_IWOTH} & \textit{other-write}, tutti possono scrivere \\
- \const{S\_IXOTH} & \textit{other-execute}, tutti possono eseguire\\
+ \const{S\_IRUSR} & \textit{user-read}, l'utente può leggere.\\
+ \const{S\_IWUSR} & \textit{user-write}, l'utente può scrivere.\\
+ \const{S\_IXUSR} & \textit{user-execute}, l'utente può eseguire.\\
+ \hline
+ \const{S\_IRGRP} & \textit{group-read}, il gruppo può leggere.\\
+ \const{S\_IWGRP} & \textit{group-write}, il gruppo può scrivere.\\
+ \const{S\_IXGRP} & \textit{group-execute}, il gruppo può eseguire.\\
+ \hline
+ \const{S\_IROTH} & \textit{other-read}, tutti possono leggere.\\
+ \const{S\_IWOTH} & \textit{other-write}, tutti possono scrivere.\\
+ \const{S\_IXOTH} & \textit{other-execute}, tutti possono eseguire.\\
\hline
\end{tabular}
\caption{I bit dei permessi di accesso ai file, come definiti in
\textbf{\param{mode}} & \textbf{Significato} \\
\hline
\hline
- \const{R\_OK} & verifica il permesso di lettura \\
- \const{W\_OK} & verifica il permesso di scritture \\
- \const{X\_OK} & verifica il permesso di esecuzione \\
- \const{F\_OK} & verifica l'esistenza del file \\
+ \const{R\_OK} & Verifica il permesso di lettura. \\
+ \const{W\_OK} & Verifica il permesso di scrittura. \\
+ \const{X\_OK} & Verifica il permesso di esecuzione. \\
+ \const{F\_OK} & Verifica l'esistenza del file. \\
\hline
\end{tabular}
\caption{Valori possibile per l'argomento \param{mode} della funzione
\bodydesc{Le funzioni restituiscono zero in caso di successo e -1 per
un errore, in caso di errore \var{errno} può assumere i valori:
\begin{errlist}
- \item[\errcode{EPERM}] L'user-ID effettivo non corrisponde a quello del
+ \item[\errcode{EPERM}] l'user-ID effettivo non corrisponde a quello del
proprietario del file o non è zero.
- \item[\errcode{EROFS}] Il file è su un filesystem in sola lettura.
+ \item[\errcode{EROFS}] il file è su un filesystem in sola lettura.
\end{errlist}
ed inoltre \errval{EIO}; \func{chmod} restituisce anche \errval{EFAULT},
\errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOMEM}, \errval{ENOTDIR},
\textbf{\param{mode}} & \textbf{Valore} & \textbf{Significato} \\
\hline
\hline
- \const{S\_ISUID} & 04000 & set user ID \itindex{suid~bit} \\
- \const{S\_ISGID} & 02000 & set group ID \itindex{sgid~bit}\\
- \const{S\_ISVTX} & 01000 & sticky bit \itindex{sticky~bit}\\
+ \const{S\_ISUID} & 04000 & Set user ID \itindex{suid~bit}.\\
+ \const{S\_ISGID} & 02000 & Set group ID \itindex{sgid~bit}.\\
+ \const{S\_ISVTX} & 01000 & Sticky bit \itindex{sticky~bit}.\\
\hline
- \const{S\_IRWXU} & 00700 & l'utente ha tutti i permessi \\
- \const{S\_IRUSR} & 00400 & l'utente ha il permesso di lettura \\
- \const{S\_IWUSR} & 00200 & l'utente ha il permesso di scrittura \\
- \const{S\_IXUSR} & 00100 & l'utente ha il permesso di esecuzione \\
+ \const{S\_IRWXU} & 00700 & L'utente ha tutti i permessi.\\
+ \const{S\_IRUSR} & 00400 & L'utente ha il permesso di lettura.\\
+ \const{S\_IWUSR} & 00200 & L'utente ha il permesso di scrittura.\\
+ \const{S\_IXUSR} & 00100 & L'utente ha il permesso di esecuzione.\\
\hline
- \const{S\_IRWXG} & 00070 & il gruppo ha tutti i permessi \\
- \const{S\_IRGRP} & 00040 & il gruppo ha il permesso di lettura \\
- \const{S\_IWGRP} & 00020 & il gruppo ha il permesso di scrittura \\
- \const{S\_IXGRP} & 00010 & il gruppo ha il permesso di esecuzione \\
+ \const{S\_IRWXG} & 00070 & Il gruppo ha tutti i permessi.\\
+ \const{S\_IRGRP} & 00040 & Il gruppo ha il permesso di lettura.\\
+ \const{S\_IWGRP} & 00020 & Il gruppo ha il permesso di scrittura.\\
+ \const{S\_IXGRP} & 00010 & Il gruppo ha il permesso di esecuzione.\\
\hline
- \const{S\_IRWXO} & 00007 & gli altri hanno tutti i permessi \\
- \const{S\_IROTH} & 00004 & gli altri hanno il permesso di lettura \\
- \const{S\_IWOTH} & 00002 & gli altri hanno il permesso di scrittura \\
- \const{S\_IXOTH} & 00001 & gli altri hanno il permesso di esecuzione \\
+ \const{S\_IRWXO} & 00007 & Gli altri hanno tutti i permessi.\\
+ \const{S\_IROTH} & 00004 & Gli altri hanno il permesso di lettura.\\
+ \const{S\_IWOTH} & 00002 & Gli altri hanno il permesso di scrittura.\\
+ \const{S\_IXOTH} & 00001 & Gli altri hanno il permesso di esecuzione.\\
\hline
\end{tabular}
\caption{Valori delle costanti usate per indicare i vari bit di
\bodydesc{Le funzioni restituiscono zero in caso di successo e -1 per
un errore, in caso di errore \var{errno} può assumere i valori:
\begin{errlist}
- \item[\errcode{EPERM}] L'user-ID effettivo non corrisponde a quello del
+ \item[\errcode{EPERM}] l'user-ID effettivo non corrisponde a quello del
proprietario del file o non è zero, o utente e gruppo non sono validi
\end{errlist}
Oltre a questi entrambe restituiscono gli errori \errval{EROFS} e
Per risolvere questo problema alcuni sistemi unix-like (e fra questi anche
Linux) hanno introdotto un meccanismo generico che consenta di associare delle
informazioni ai singoli file,\footnote{l'uso più comune è quello della ACL,
- che tratteremo a breve, ma si possono inserire anche altre informazioni.}
-detto \textit{Extended Attributes}. Gli \textsl{attributi estesi} non sono
-altro che delle coppie nome/valore che sono associate permanentemente ad un
-oggetto sul filesystem, analoghi di quello che sono le variabili di ambiente
-(vedi sez.~\ref{sec:proc_environ}) per un processo.
+ che tratteremo nella prossima sezione, ma si possono inserire anche altre
+ informazioni.} detto \textit{Extended Attributes}. Gli \textsl{attributi
+ estesi} non sono altro che delle coppie nome/valore che sono associate
+permanentemente ad un oggetto sul filesystem, analoghi di quello che sono le
+variabili di ambiente (vedi sez.~\ref{sec:proc_environ}) per un processo.
Altri sistemi (come Solaris, MacOS e Windows) hanno adottato un meccanismo
diverso in cui ad un file sono associati diversi flussi di dati, su cui
richiedono una gran numero di accessi, come le ACL.} e di garantire
l'atomicità di tutte le operazioni.
+In Linux gli attributi estesi sono sempre associati al singolo inode e
+l'accesso viene sempre eseguito in forma atomica, in lettura il valore
+corrente viene scritto su un buffer in memoria, mentre la scrittura prevede
+che ogni valore precedente sia sovrascritto. L'accesso agli attributi estesi è
+regolato dagli ordinari permessi dei file: occorre il permesso di lettura per
+leggerli e quello di scrittura per scriverli o modificarli; il permesso di
+esecuzione viene invece interpretato coma la capacità di ottenere la lista
+degli attributi presenti.
+
+Si tenga presente che non tutti i filesystem supportano gli \textit{Extended
+ Attributes}, in particolare al momento della scrittura di queste dispense
+essi sono presenti solo su \textsl{ext2}, \textsl{ext3} e \textsl{XFS}.
+Inoltre a seconda della implementazione ci possono essere dei limiti sulla
+quantità di attributi che si possono utilizzare.\footnote{ad esempio nel caso
+ di \textsl{ext2} ed \textsl{ext3} è richiesto che essi siano contenuti
+ all'interno di un singolo blocco (pertanto con dimensioni massime
+ dell'ordine di 1024, 2048 o 4096 byte a seconda delle dimensioni di
+ quest'ultimo impostate in fase di formattazione), mentre con \textsl{XFS}
+ non ci sono limiti ed i dati vengono memorizzati in maniera diversa
+ (nell'inode stesso, in un blocco a parte, in una struttura ad albero
+ dedicata) per mantentere la scalabilità.} Infine lo spazio utilizzato per
+mantenere gli attributi estesi viene tenuto in conto per il calcolo delle
+quote di utente e gruppo proprietari del file.
+
+Come accennato gli \textit{Extended Attributes} costituiscono un meccanismo
+per mantenere informazioni ulteriori associate al singolo file, che possono
+avere gli usi più disparati.\footnote{come accennato sono usati per le ACL che
+ vedremo in sez.~\ref{sec:file_ACL}, ma anche per le estensioni di SELinux.}
+Per poter distinguere i vari utilizzi possibili gli attributi sono stati
+suddivisi in diverse \textsl{classi}, a cui poter applicare requisiti diversi
+per l'accesso e la gestione. Per questo motivo il nome di un attributo deve
+essere sempre specificato nella forma \texttt{namespace.attribute},
+\textit{namespace} fa riferimento alla classe a cui l'attributo appartiene; al
+momento della scrittura di queste dispense essi sono definite le seguenti
+classi:
+
+
+
+
+
+
+
+\begin{table}[htb]
+ \centering
+ \footnotesize
+ \begin{tabular}{|c|l|}
+ \hline
+ \textbf{Nome} & \textbf{Classe} \\
+ \hline
+ \hline
+ \const{security}& . \\
+ \const{system} & . \\
+ \const{trusted} & . \\
+ \const{user} & . \\
+ \hline
+ \end{tabular}
+ \caption{I nomi utilizzati valore di \texttt{namespace} per distinguere le
+ varue classi di \textit{Extended Attributes}.}
+ \label{tab:extended_attribute_class}
+\end{table}
rispondere in maniera adeguata a situazioni che richiedono una gestione
complessa dei permessi di accesso.\footnote{già un requisito come quello di
dare accesso in scrittura ad alcune persone ed in sola lettura ad altre non
- si può soddisfare in maniera soddifacente.}
+ si può soddisfare in maniera soddisfacente.}
Per questo motivo erano state progressivamente introdotte nelle varie versioni
di Unix dei meccanismi di gestione dei permessi dei file più flessibili, nella
finanziamenti vennero ritirati senza che si fosse arrivati alla definizione di
uno standard, dato però che una parte della documentazione prodotta era di
alta qualità venne deciso di rilasciare al pubblico la diciassettesima bozza
-del documento, quella che va sotto il nome di POSIX 1003.1e Draft 17, che è
-divenuta la base sulla quale si definiscono quelle che vanno sotto il nome di
-\textit{Posix ACL}.
+del documento, quella che va sotto il nome di \textit{POSIX 1003.1e Draft 17},
+che è divenuta la base sulla quale si definiscono quelle che vanno sotto il
+nome di \textit{Posix ACL}.
A differenza di altri sistemi (ad esempio FreeBSD) nel caso di Linux si è
scelto di realizzare le ACL attraverso l'interfaccia degli \textit{Extended
Attributes}, e fornire tutte le relative funzioni di gestione tramite una
-liberia, \texttt{libacl} che nasconde i dettagli implementativi delle stesse e
+libreria, \texttt{libacl} che nasconde i dettagli implementativi delle stesse e
presenta ai programmi una interfaccia che fa riferimento allo standard POSIX
1003.1e.
+
+
+
+
\itindend{Access~Control~List}
Normalmente la directory radice di un processo coincide anche con la radice
del filesystem usata dal kernel, e dato che il suo valore viene ereditato dal
padre da ogni processo figlio, in generale i processi risolvono i
-\itindsub{pathname}{assoluto}\textit{pathname} assoluti a partire sempre dalla
-stessa directory, che corrisponde alla \file{/} del sistema.
+\itindsub{pathname}{assoluto} \textit{pathname} assoluti a partire sempre
+dalla stessa directory, che corrisponde alla radice del sistema.
In certe situazioni però, per motivi di sicurezza, è utile poter impedire che
un processo possa accedere a tutto il filesystem; per far questo si può
\bodydesc{La funzione restituisce zero in caso di successo e -1 per
un errore, in caso di errore \var{errno} può assumere i valori:
\begin{errlist}
- \item[\errcode{EPERM}] L'user-ID effettivo del processo non è zero.
+ \item[\errcode{EPERM}] l'user-ID effettivo del processo non è zero.
\end{errlist}
ed inoltre \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT},
\errval{ENOMEM}, \errval{ENOTDIR}, \errval{EACCES}, \errval{ELOOP};
replicare all'interno della \textit{chroot jail} tutti i file (in genere
programmi e librerie) di cui il server potrebbe avere bisogno.
+
+
+
+
+
+
% LocalWords: sez like filesystem unlink MacOS Windows VMS inode kernel unistd
% LocalWords: un'etichetta int const char oldpath newpath errno EXDEV EPERM st
% LocalWords: EEXIST EMLINK EACCES ENAMETOOLONG ENOTDIR EFAULT ENOMEM EROFS ls
% LocalWords: gid Control List patch mandatory control execute group other all
% LocalWords: dell' effective passwd IGID locking swap saved text IRWXU IRWXG
% LocalWords: IRWXO ext reiser capability FSETID mask capabilities chroot jail
-% LocalWords: FTP Di filter reiserfs
+% LocalWords: FTP Di filter reiserfs Attributes Solaris Posix FreeBSD libacl
%%% Local Variables:
%%% mode: latex