Passata generale di ispell
[gapil.git] / filedir.tex
index 19f347dddcf1bcc312bd0ba7da98f455bd8ff347..c9884c4f4e6acf56a9c851ade4307375581f011d 100644 (file)
@@ -5,7 +5,7 @@ In questo capitolo tratteremo in dettaglio le modalit
 file e directory, iniziando dalle funzioni di libreria che si usano per
 copiarli, spostarli e cambiarne i nomi. Esamineremo poi l'interfaccia che
 permette la manipolazione dei vari attributi di file e directory ed alla
-finefaremo una trattazione dettagliata su come è strutturato il sistema base
+fine faremo una trattazione dettagliata su come è strutturato il sistema base
 di protezioni e controllo di accesso ai file e sulle funzioni che ne
 permettono la gestione. Tutto quello che riguarda invece la manipolazione del
 contenuto dei file è lasciato ai capitoli successivi.
@@ -29,7 +29,7 @@ capitolo precedente.
 
 Una caratteristica comune a diversi sistemi operativi è quella di poter creare
 dei nomi fittizi (come gli alias del MacOS o i collegamenti di Windows) che
-permettono di fare riferiremento allo stesso file chiamandolo con nomi diversi
+permettono di fare riferimento allo stesso file chiamandolo con nomi diversi
 o accedendovi da directory diverse.
 
 Questo è possibile anche in ambiente unix, dove tali collegamenti sono
@@ -69,7 +69,7 @@ principali, come risultano dalla man page, sono le seguenti:
     già.
   \item \macro{EMLINK} ci sono troppi link al file \var{oldpath} (il
     numero massimo è specificato dalla variabile \macro{LINK\_MAX}, vedi
-    \secref{sec:xxx_limits}).
+    \secref{sec:sys_limits}).
   \end{errlist}
   ed inoltre \macro{EACCES}, \macro{ENAMETOOLONG}, \macro{ENOTDIR},
   \macro{EFAULT}, \macro{ENOMEM}, \macro{EROFS}, \macro{ELOOP},
@@ -86,7 +86,7 @@ essere cos
 Per quanto dicevamo in \secref{sec:file_filesystem} la creazione di un
 collegamento diretto è possibile solo se entrambi i pathname sono nello stesso
 filesystem; inoltre il filesystem deve supportare i collegamenti diretti (il
-mneccanismo non è disponibile ad esempio con il filesystem \acr{vfat} di
+meccanismo non è disponibile ad esempio con il filesystem \acr{vfat} di
 Windows). 
 
 La funzione inoltre opera sia sui file ordinari che sugli altri oggetti del
@@ -108,7 +108,6 @@ funzione restituisce l'errore \macro{EPERM}.
 La rimozione di un file (o più precisamente della voce che lo referenzia
 all'interno di una directory) si 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
   decrementa il numero di riferimenti nel relativo inode. Nel caso di link
@@ -143,9 +142,9 @@ restrizioni 
 
 Una delle caratteristiche di queste funzioni è che la creazione/rimozione
 della nome dalla directory e l'incremento/decremento del numero di riferimenti
-nell'inode deve essere una operazione atomica (cioè non interrompibile da
-altri processi), per questo entrambe queste funzioni sono realizzate tramite
-una singola system call.
+nell'inode deve essere una operazione atomica (si veda
+\secref{sec:proc_atom_oper}), per questo entrambe queste funzioni sono
+realizzate tramite una singola system call.
 
 Si ricordi infine che il file non viene eliminato dal disco fintanto che tutti
 i riferimenti ad esso sono stati cancellati, solo quando il \textit{link
@@ -173,7 +172,6 @@ funzione \func{remove}. Questa 
 per cancellare un file o una directory (e funziona anche per i sistemi che non
 supportano i link diretti). Per i file è identica a \func{unlink} e per le
 directory è identica a \func{rmdir}:
-
 \begin{prototype}{stdio.h}{int remove(const char *pathname)}
   Cancella un nome dal filesystem. Usa \func{unlink} per i file e
   \func{rmdir} per le directory.
@@ -187,11 +185,10 @@ Per cambiare nome ad un file o a una directory (che devono comunque essere
 nello stesso filesystem) si usa invece la funzione \func{rename}\footnote{la
   funzione è definita dallo standard ANSI C solo per i file, POSIX estende la
   funzione anche alle directory}, il cui prototipo è:
-
 \begin{prototype}{stdio.h}
   {int rename(const char *oldpath, const char *newpath)} 
   
-  Rinomina \var{oldpath} in \var{newpth}, eseguendo se necessario lo
+  Rinomina \var{oldpath} in \var{newpath}, eseguendo se necessario lo
   spostamento di un file fra directory diverse. Eventuali altri link diretti
   allo stesso file non vengono influenzati.
   
@@ -258,7 +255,7 @@ riferimento allo stesso file.
 
 Come abbiamo visto in \secref{sec:file_link} la funzione \func{link} crea
 riferimenti agli inodes, pertanto può funzionare soltanto per file che
-risiedono sullo stesso filesysteme e solo per un filesystem di tipo unix.
+risiedono sullo stesso filesystem e solo per un filesystem di tipo unix.
 Inoltre abbiamo visto che in Linux non è consentito eseguire un link diretto
 ad una directory.
 
@@ -276,7 +273,6 @@ funzioni di libreria (come \func{open} o \func{stat}) dare come parametro un
 link simbolico comporta l'applicazione della funzione al file da esso
 specificato. La funzione che permette di creare un nuovo link simbolico è
 \func{symlink}; il suo prototipo è:
-
 \begin{prototype}{unistd.h}
   {int symlink(const char * oldpath, const char * newpath)} 
   Crea un nuovo link simbolico di nome \func{newpath} il cui contenuto è
@@ -355,7 +351,6 @@ Dato che, come indicato in \tabref{tab:file_symb_effect}, funzioni come la
 alle informazioni del link invece che a quelle del file a cui esso fa
 riferimento. Quando si vuole leggere il contenuto di un link simbolico si usa
 la funzione \func{readlink}, il cui prototipo è:
-
 \begin{prototype}{unistd.h}
 {int readlink(const char * path, char * buff, size\_t size)} 
   Legge il contenuto del link simbolico indicato da \var{path} nel buffer
@@ -383,7 +378,7 @@ stringa con un carattere nullo e la tronca alla dimensione specificata da
 
 \begin{figure}[htb]
   \centering
-  \includegraphics[width=5cm]{img/link_loop.eps}
+  \includegraphics[width=5cm]{img/link_loop}
   \caption{Esempio di loop nel filesystem creato con un link simbolico.}
   \label{fig:file_link_loop}
 \end{figure}
@@ -436,7 +431,6 @@ Queste due funzioni servono per creare e cancellare delle directory e sono
 omonime degli analoghi comandi di shell.  Per poter accedere ai tipi usati
 da queste funzioni si deve includere il file \file{sys/types.h}, il
 prototipo della prima è:
-
 \begin{prototype}{sys/stat.h}
   {int mkdir (const char * dirname, mode\_t mode)} 
   Crea una nuova directory vuota con il nome indicato da \var{dirname},
@@ -453,7 +447,7 @@ prototipo della prima 
   \item \macro{EMLINK} La directory in cui si vuole creare la nuova directory
     contiene troppi file. Sotto Linux questo normalmente non avviene perché il
     filesystem standard consente la creazione di un numero di file maggiore di
-    quelli che possono essere contenuti nell'hard-disk, ma potendo avere a che
+    quelli che possono essere contenuti nel disco, ma potendo avere a che
     fare anche con filesystem di altri sistemi questo errore può presentarsi.
   \item \macro{ENOSPC} Non c'è abbastanza spazio sul file system per creare
     la nuova directory o si è esaurita la quota disco dell'utente.
@@ -474,7 +468,6 @@ titolarit
 La seconda funzione serve ad eliminare una directory già vuota (la directory
 deve cioè contenere soltanto le due voci standard \file{.} e \file{..}); il
 suo prototipo è:
-
 \begin{prototype}{sys/stat.h}
   {int rmdir (const char * dirname)} Cancella la directory \var{dirname}, che
   deve essere vuota.  Il nome può essere indicato con il pathname assoluto o
@@ -548,7 +541,6 @@ directory corrente di qualunque comando da essa lanciato.
 In genere il kernel tiene traccia per ciascun processo dell'inode della
 directory di lavoro corrente, per ottenere il pathname occorre usare una
 apposita funzione di libreria,  \func{getcwd}, il cui prototipo è:
-
 \begin{prototype}{unistd.h}{char * getcwd (char * buffer, size\_t size)}
   Restituisce il filename completo della directory di lavoro corrente nella
   stringa puntata da \var{buffer}, che deve essere precedentemente
@@ -570,7 +562,7 @@ apposita funzione di libreria,  \func{getcwd}, il cui prototipo 
 
 Il buffer deve essere sufficientemente lungo da poter contenere il pathname
 completo più lo zero di terminazione della stringa. Qualora esso ecceda le
-dimensioni specificate con \var{size} la funzione restituiece un errore.  Si
+dimensioni specificate con \var{size} la funzione restituisce un errore.  Si
 può anche specificare un puntatore nullo come \var{buffer}\footnote{questa è
   una estensione allo standard POSIX.1, supportata da Linux}, nel qual caso la
 stringa sarà allocata automaticamente per una dimensione pari a \var{size}
@@ -582,7 +574,7 @@ Di questa funzione esiste una versione \func{char * getwd(char * buffer)}
 fatta per compatibilità all'indietro con BSD, che non consente di specificare
 la dimensione del buffer; esso deve essere allocato in precedenza ed avere una
 dimensione superiore a \macro{PATH\_MAX} (di solito 256 byte, vedi
-\secref{sec:xxx_limits}); il problema è che in Linux non esiste una dimensione
+\secref{sec:sys_limits}); il problema è che in Linux non esiste una dimensione
 superiore per un pathname, per cui non è detto che il buffer sia sufficiente a
 contenere il nome del file, e questa è la ragione principale per cui questa
 funzione è deprecata.
@@ -600,7 +592,6 @@ nome (che deriva da \textit{change directory}), per cambiare la directory di
 lavoro corrente. Dato che anche le directory sono file, è possibile riferirsi
 ad esse anche tramite il file descriptor dell'interfaccia a basso livello, e
 non solo tramite il filename, i prototipi di queste funzioni sono:
-
 \begin{functions}
   \headdecl{unistd.h} 
   \funcdecl{int chdir (const char * path)} 
@@ -1014,7 +1005,6 @@ esiste.
 
 I tempi di ultimo accesso e modifica possono essere cambiati usando la
 funzione \func{utime}, il cui prototipo è:
-
 \begin{prototype}{utime.h}
 {int utime(const char * filename, struct utimbuf *times)} 
 
@@ -1259,19 +1249,19 @@ corrispondono dell'utente con cui si 
 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 \acr{suid} e \acr{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 bit suid settato per cui quando viene lanciato da un utente
-normale parte con i privilegi di root.
+assegnerà come \textit{effective user id} al nuovo processo l'\acr{uid} del
+proprietario del file al posto dell'\acr{uid} del processo originario.  Avere
+il bit \acr{sgid} settato ha lo stesso effetto sull'\textit{effective group
+  id} del processo.
+
+I bit \acr{suid} e \acr{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 bit
+\acr{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
@@ -1298,7 +1288,7 @@ Infine Linux utilizza il bit \acr{sgid} per una ulteriore estensione
 mutuata da SVR4. Il caso in cui il file abbia il bit \acr{sgid} settato ma
 non il corrispondente bit di esecuzione viene utilizzato per attivare per
 quel file il \textit{mandatory locking} (argomento che affronteremo nei
-dettagli in \secref{sec:xxx_mandatory_lock}).
+dettagli in \secref{sec:file_mand_locking}).
 
 
 \subsection{Il bit \textsl{sticky}}
@@ -1363,11 +1353,11 @@ invece prevede due diverse possibilit
 \begin{itemize}
 \item il \acr{gid} del file corrisponde all'\textit{effective group id} del
   processo.
-\item il \acr{gid} del file corrisponde al gid della directory in cui esso è
-  creato.
+\item il \acr{gid} del file corrisponde al \acr{gid} della directory in cui
+  esso è creato.
 \end{itemize}
 in genere BSD usa sempre la seconda possibilità, che viene per questo chiamata
-semantica BSD. Linux invece segue quella che viene chiamata semantica SVR4; di
+semantica BSD. Linux invece segue quella che viene chiamata semantica SVr4; di
 norma cioè il nuovo file viene creato, seguendo la prima opzione, con il
 \acr{gid} del processo, se però la directory in cui viene creato il file ha il
 bit \acr{sgid} settato allora viene usata la seconda opzione.
@@ -1393,7 +1383,6 @@ l'\acr{uid} dell'utente che ha lanciato il programma, che, come accennato in
 \secref{sec:file_suid_sgid} e spiegato in \secref{sec:proc_perms} non è
 detto sia uguale all'\textit{effective user id}). Per far questo si può usare
 la funzione \func{access}, il cui prototipo è:
-
 \begin{prototype}{unistd.h}
 {int access(const char *pathname, int mode)}
 
@@ -1420,7 +1409,6 @@ possa scrivere come in un file, e il fatto che un file abbia permesso di
 esecuzione non comporta che contenga un programma eseguibile. La funzione
 ritorna zero solo se tutte i permessi controllati sono disponibili, in caso
 contrario (o di errore) ritorna -1.
-
 \begin{table}[htb]
   \centering
   \footnotesize
@@ -1452,7 +1440,6 @@ accedere ad un certo file.
 Per cambiare i permessi di un file il sistema mette ad disposizione due
 funzioni, che operano rispettivamente su un filename e su un file descriptor,
 i loro prototipi sono:
-
 \begin{functions}
   \headdecl{sys/types.h} 
   \headdecl{sys/stat.h} 
@@ -1483,7 +1470,7 @@ divisibili in gruppi di tre). Ad esempio i permessi standard assegnati ai
 nuovi file (lettura e scrittura per il proprietario, sola lettura per il
 gruppo e gli altri) sono corrispondenti al valore ottale $0644$, un programma
 invece avrebbe anche il bit di esecuzione attivo, con un valore di $0755$, se
-si volesse attivare il bit suid il valore da fornire sarebbe $4755$.
+si volesse attivare il bit \acr{suid} il valore da fornire sarebbe $4755$.
 
 \begin{table}[!htb]
   \centering
@@ -1551,7 +1538,6 @@ privilegio.
 Oltre che dai valori indicati in sede di creazione, i permessi assegnati ai
 nuovi file sono controllati anche da una maschera di bit settata con la
 funzione \func{umask}, il cui prototipo è:
-
 \begin{prototype}{stat.h}
 {mode\_t umask(mode\_t mask)}
 
@@ -1588,7 +1574,6 @@ allora occorrer
 Come per i permessi, il sistema fornisce anche delle funzioni che permettano
 di cambiare utente e gruppo cui il file appartiene; le funzioni in questione
 sono tre e i loro prototipi sono i seguenti:
-
 \begin{functions}
   \headdecl{sys/types.h} 
   \headdecl{sys/stat.h}