\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}
\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}
(anche se non è assicurato che la funzione usi lo spazio fornito dall'utente).
I vari campi di \struct{dirent} contengono le informazioni relative alle voci
-presenti nella directory; sia BSD che SVr4\footnote{POSIX prevede invece solo
- la presenza del campo \var{d\_fileno}, identico \var{d\_ino}, che in Linux è
- definito come alias di quest'ultimo. Il campo \var{d\_name} è considerato
- dipendente dall'implementazione.} prevedono che siano sempre presenti il
-campo \var{d\_name}, che contiene il nome del file nella forma di una stringa
-terminata da uno zero,\footnote{lo standard POSIX non specifica una lunghezza,
- ma solo un limite \const{NAME\_MAX}; in SVr4 la lunghezza del campo è
- definita come \code{NAME\_MAX+1} che di norma porta al valore di 256 byte
- usato anche in Linux.} ed il campo \var{d\_ino}, che contiene il numero di
-\index{inode} inode cui il file è associato (di solito corrisponde al campo
+presenti nella directory; sia BSD che SVr4\footnote{lo standard POSIX prevede
+ invece solo la presenza del campo \var{d\_fileno}, identico \var{d\_ino},
+ che in Linux è definito come alias di quest'ultimo. Il campo \var{d\_name} è
+ considerato dipendente dall'implementazione.} prevedono che siano sempre
+presenti il campo \var{d\_name}, che contiene il nome del file nella forma di
+una stringa terminata da uno zero,\footnote{lo standard POSIX non specifica
+ una lunghezza, ma solo un limite \const{NAME\_MAX}; in SVr4 la lunghezza del
+ campo è definita come \code{NAME\_MAX+1} che di norma porta al valore di 256
+ byte usato anche in Linux.} ed il campo \var{d\_ino}, che contiene il numero
+di \index{inode} inode cui il file è associato (di solito corrisponde al campo
\var{st\_ino} di \struct{stat}).
\begin{figure}[!htb]
\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
Una delle caratteristiche fondamentali di tutti i sistemi unix-like è quella
del controllo di accesso ai file, che viene implementato per qualunque
filesystem standard.\footnote{per standard si intende che implementa le
- caratteristiche previste dallo standard POSIX. In Linux sono disponibili
+ caratteristiche previste dallo standard POSIX; in Linux sono disponibili
anche una serie di altri filesystem, come quelli di Windows e del Mac, che
non supportano queste caratteristiche.} In questa sezione ne esamineremo i
concetti essenziali e le funzioni usate per gestirne i vari aspetti.
degli identificatori di utente e gruppo (\acr{uid} e \acr{gid}). Questi valori
sono accessibili da programma tramite la funzione \func{stat}, e sono
mantenuti nei campi \var{st\_uid} e \var{st\_gid} della struttura
-\struct{stat} (si veda sez.~\ref{sec:file_stat}).\footnote{Questo è vero solo
+\struct{stat} (si veda sez.~\ref{sec:file_stat}).\footnote{questo è vero solo
per filesystem di tipo Unix, ad esempio non è vero per il filesystem vfat di
Windows, che non fornisce nessun supporto per l'accesso multiutente, e per
il quale i permessi vengono assegnati in maniera fissa con un opzione in
Il controllo di accesso ai file segue un modello abbastanza semplice che
prevede tre permessi fondamentali strutturati su tre livelli di accesso.
Esistono varie estensioni a questo modello,\footnote{come le \textit{Access
- Control List} che possono essere aggiunte al filesystem standard con
- opportune patch, la cui introduzione nei kernel ufficiali è iniziata con la
- serie 2.5.x. per arrivare a meccanismi di controllo ancora più sofisticati
- come il \textit{mandatory access control} di SE-Linux.} ma nella maggior
-parte dei casi il meccanismo standard è più che sufficiente a soddisfare tutte
-le necessità più comuni. I tre permessi di base associati ad ogni file sono:
+ Control List} che sono state aggiunte ai filesystem standard con opportune
+ estensioni (vedi sez.~\ref{sec:file_ACL}) per arrivare a meccanismi di
+ controllo ancora più sofisticati come il \textit{mandatory access control}
+ di SE-Linux.} ma nella maggior parte dei casi il meccanismo standard è più
+che sufficiente a soddisfare tutte le necessità più comuni. I tre permessi di
+base associati ad ogni file sono:
\begin{itemize*}
\item il permesso di lettura (indicato con la lettera \texttt{r}, dall'inglese
\textit{read}).
\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 prossimaa 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
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