Questi permessi vengono usati in maniera diversa dalle varie funzioni, e a
seconda che si riferiscano a file, link simbolici o directory, qui ci
-limiteremo ad un riassunto delle regole generali, entrando nei
-dettagli più avanti.
+limiteremo ad un riassunto delle regole generali, entrando nei dettagli più
+avanti.
La prima regola è che per poter accedere ad un file attraverso il suo pathname
occorre il permesso di esecuzione in ciascuna delle directory che compongono
l'utente e il gruppo a cui il file appartiene (i valori di \var{st\_uid} e
\var{st\_gid} accennati in precedenza) e l'\textit{effective user id},
l'\textit{effective group id} e gli eventuali \textit{supplementary group id}
-del processo.
+del processo\footnote{in realtà Linux per quanto riguarda l'accesso ai file
+ utilizza al posto degli \textit{effective id} i \textit{filesystem id} (si
+ veda \secref{sec:proc_perms}), ma essendo questi del tutto equivalenti ai
+ primi, eccetto il caso in cui si voglia scrivere un server NFS, ignoreremo
+ questa differenza}.
Per una spiegazione dettagliata degli identificatori associati ai processi si
veda \secref{sec:proc_perms}; normalmente, a parte quanto vedremo in
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}, che permette l'accesso a tutti i dati
+usando la funzione \func{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}).
+controllo di accesso, trattate in in \secref{sec:file_access_control}).
-\subsection{Le funzioni \texttt{stat}, \texttt{fstat} e \texttt{lstat}}
+\subsection{Le funzioni \func{stat}, \func{fstat} e \func{lstat}}
\label{sec:file_stat}
La lettura delle informazioni relative ai file è fatta attraverso la famiglia
\macro{EACCESS}, \macro{ENOMEM}, \macro{ENAMETOOLONG}.
\end{functions}
-La struttura \texttt{stat} è definita nell'header \texttt{sys/stat.h} e in
+La struttura \var{stat} è definita nell'header \file{sys/stat.h} e in
generale dipende dall'implementazione, la versione usata da Linux è mostrata
in \nfig, così come riportata dalla man page (in realtà la definizione
effettivamente usata nel kernel dipende dall'architettura e ha altri campi
Si noti come i vari membri della struttura siano specificati come tipi nativi
del sistema (di quelli definiti in \tabref{tab:xxx_sys_types}, e dichiarati in
-\texttt{sys/types.h}).
+\file{sys/types.h}).
\subsection{I tipi di file}
Come riportato in \tabref{tab:file_file_types} in Linux oltre ai file e
alle directory esistono vari altri oggetti che possono stare su un filesystem;
-il tipo di file è ritornato dalla \texttt{stat} nel campo \texttt{st\_mode}
+il tipo di file è ritornato dalla \func{stat} nel campo \var{st\_mode}
(che è quello che contiene anche le informazioni relative ai permessi).
Dato che il valore numerico può variare a seconda delle implementazioni, lo
standard POSIX definisce un insieme di macro per verificare il tipo di files,
queste vengono usate anche da Linux che supporta pure le estensioni per link
-simbolici e socket definite da BSD, l'elenco completo di tutte le macro
-definite in GNU/Linux è riportato in \ntab.
+simbolici e socket definite da BSD, l'elenco completo di tutte le macro è
+riportato in \ntab.
\begin{table}[htb]
\centering
\footnotesize
esiste.
-\subsection{La funzione \texttt{utime}}
+\subsection{La funzione \func{utime}}
\label{sec:file_utime}
I tempi di ultimo accesso e modifica possono essere cambiati usando la
La funzione restituisce zero in caso di successo e -1 in caso di errore, nel
qual caso \var{errno} è settata opportunamente.
\begin{errlist}
-\item \texttt{EACCESS} non si ha il permesso di scrittura sul file.
-\item \texttt{ENOENT} \var{filename} non esiste.
+\item \macro{EACCESS} non si ha il permesso di scrittura sul file.
+\item \macro{ENOENT} \var{filename} non esiste.
\end{errlist}
\end{prototype}
\section{La manipolazione di file e directory}
-Come già accennato in \secref{sec:file_filesystem} in un sistema unix-like
-i file hanno delle caratteristiche specifiche dipendenti dall'architettura del
+Come già accennato in \secref{sec:file_filesystem} in un sistema unix-like i
+file hanno delle caratteristiche specifiche dipendenti dall'architettura del
sistema, esamineremo qui allora le funzioni usate per la creazione di link
-simbolici e diretti e per la gestione delle directory, approfondendo quanto
+simbolici e diretti e per la gestione delle directory, approfondendo quanto
già accennato in precedenza.
-\subsection{Le funzioni \texttt{link} e \texttt{unlink}}
+\subsection{Le funzioni \func{link} e \func{unlink}}
\label{sec:file_link}
Una delle caratteristiche comuni a vari sistemi operativi è quella di poter
altrettante diverse associazioni allo stesso inode; si noti poi che nessuno di
questi nomi viene ad assumere una particolare preferenza rispetto agli altri.
-Per aggiungere un nome ad un inode si utilizza la funzione \texttt{link}; si
+Per aggiungere un nome ad un inode si utilizza la funzione \func{link}; si
suole chiamare questo tipo di associazione un collegamento diretto (o
\textit{hard link}). Il prototipo della funzione e le sue caratteristiche
principali, come risultano dalla man page, sono le seguenti:
\begin{prototype}{unistd.h}
{int link(const char * oldpath, const char * newpath)}
- Crea un nuovo collegamento diretto al file indicato da \texttt{oldpath}
- dandogli nome \texttt{newpath}.
+ Crea un nuovo collegamento diretto al file indicato da \var{oldpath}
+ dandogli nome \var{newpath}.
La funzione restituisce zero in caso di successo e -1 in caso di errore. La
- variabile \texttt{errno} viene settata opportunamente, i principali codici
+ variabile \var{errno} viene settata opportunamente, i principali codici
di errore sono:
\begin{errlist}
- \item \texttt{EXDEV} \texttt{oldpath} e \texttt{newpath} non sono sullo
+ \item \macro{EXDEV} \var{oldpath} e \var{newpath} non sono sullo
stesso filesystem.
- \item \texttt{EPERM} il filesystem che contiene \texttt{oldpath} e
- \texttt{newpath} non supporta i link diretti o è una directory.
- \item \texttt{EEXIST} un file (o una directory) con quel nome esiste di
+ \item \macro{EPERM} il filesystem che contiene \var{oldpath} e
+ \macro{newpath} non supporta i link diretti o è una directory.
+ \item \macro{EEXIST} un file (o una directory) con quel nome esiste di
già.
- \item \texttt{EMLINK} ci sono troppi link al file \texttt{oldpath} (il
- numero massimo è specificato dalla variabile \texttt{LINK\_MAX}, vedi
+ \item \macro{EMLINK} ci sono troppi link al file \vat{oldpath} (il
+ numero massimo è specificato dalla variabile \macro{LINK\_MAX}, vedi
\secref{sec:xxx_limits}).
\end{errlist}
Per quanto dicevamo in \secref{sec:file_filesystem} la creazione del
collegamento diretto è possibile solo se entrambi i pathname sono nello stesso
filesystem; inoltre il filesystem deve supportare i collegamenti diretti (non è
-il caso ad esempio del filesystem \texttt{vfat} di Windows).
+il caso ad esempio del filesystem \acr{vfat} di Windows).
La funzione opera sui file ordinari, come sugli altri oggetti del filesystem,
in alcuni filesystem solo l'amministratore è in grado di creare un
collegamento diretto ad un'altra directory, questo lo si fa perché in questo
caso è possibile creare dei circoli nel filesystem (vedi
-\secref{sec:file_symlink}) che molti programmi non sono in grado di
-gestire e la cui rimozione diventa estremamente complicata (in genere occorre
-far girare il programma \texttt{fsck} per riparare il filesystem); data la sua
+\secref{sec:file_symlink}) che molti programmi non sono in grado di gestire e
+la cui rimozione diventerebbe estremamente complicata (in genere occorre far
+girare il programma \cmd{fsck} per riparare il filesystem); data la sua
pericolosità in generale nei filesystem usati in Linux questa caratteristica è
-stata disabilitata, e la funzione restituisce l'errore \texttt{EPERM}.
+stata disabilitata, e la funzione restituisce l'errore \macro{EPERM}.
La rimozione di un file (o più precisamente della voce che lo referenzia) si
-effettua con la funzione \texttt{unlink}; il suo prototipo è il seguente:
+effettua con la funzione \func{unlink}; il suo prototipo è il seguente:
\begin{prototype}{unistd.h}{int unlink(const char * pathname)}
Cancella il nome specificato dal pathname nella relativa directory e
qual caso il file non viene toccato. La variabile \texttt{errno} viene
settata secondo i seguenti codici di errore:
\begin{errlist}
- \item \texttt{EISDIR} \var{pathname} si riferisce ad una directory
+ \item \macro{EISDIR} \var{pathname} si riferisce ad una directory
(valore specifico ritornato da Linux che non consente l'uso di
- \texttt{unlink} con le directory, e non conforme allo standard POSIX, che
- prescrive invece l'uso di \texttt{EPERM} in caso l'operazione non sia
+ \var{unlink} con le directory, e non conforme allo standard POSIX, che
+ prescrive invece l'uso di \macro{EPERM} in caso l'operazione non sia
consentita o il processo non abbia privilegi sufficienti).
\item \texttt{EROFS} \var{pathname} è su un filesystem montato in sola
lettura.
crash dei programmi; la tecnica è quella di aprire il file e chiamare
\texttt{unlink} subito dopo.
-\subsection{Le funzioni \texttt{remove} e \texttt{rename}}
+\subsection{Le funzioni \func{remove} e \func{rename}}
\label{sec:file_remove}
Al contrario di quanto avviene con altri unix in Linux non è possibile usare