X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=filedir.tex;h=d72b71e8717e7a3b69123560b0c8728dfe0c7f5a;hp=65ae8d6d25a9660ef36051200d2d597123addd48;hb=c474f4307db945bc45287edd0ea4c2c29374d0ee;hpb=687f101ae37d793ffda23c39ca8735e127b5fc9d diff --git a/filedir.tex b/filedir.tex index 65ae8d6..d72b71e 100644 --- a/filedir.tex +++ b/filedir.tex @@ -25,7 +25,7 @@ dei file \section{La gestione di file e directory} \label{sec:file_dir} -Come già accennato in \secref{sec:file_filesystem} in un sistema unix-like la +Come già accennato in sez.~\ref{sec:file_filesystem} in un sistema unix-like la gestione dei file ha delle caratteristiche specifiche che derivano direttamente dall'architettura del sistema. @@ -49,10 +49,10 @@ chiamandolo con nomi diversi o accedendovi da directory diverse. Questo è possibile anche in ambiente Unix, dove tali collegamenti sono usualmente chiamati \textit{link}; ma data l'architettura del sistema riguardo la gestione dei file (ed in particolare quanto trattato in -\secref{sec:file_arch_func}) ci sono due metodi sostanzialmente diversi per +sez.~\ref{sec:file_arch_func}) ci sono due metodi sostanzialmente diversi per fare questa operazione. -Come spiegato in \secref{sec:file_filesystem} l'accesso al contenuto di un +Come spiegato in sez.~\ref{sec:file_filesystem} l'accesso al contenuto di un file su disco avviene passando attraverso il suo inode\index{inode}, che è la struttura usata dal kernel che lo identifica univocamente all'interno di un singolo filesystem. Il nome del file che si trova nella voce di una directory @@ -86,7 +86,7 @@ chiamare questo tipo di associazione un collegamento diretto (o \textit{hard già. \item[\errcode{EMLINK}] ci sono troppi link al file \param{oldpath} (il numero massimo è specificato dalla variabile \const{LINK\_MAX}, vedi - \secref{sec:sys_limits}). + sez.~\ref{sec:sys_limits}). \end{errlist} ed inoltre \errval{EACCES}, \errval{ENAMETOOLONG}, \errval{ENOTDIR}, \errval{EFAULT}, \errval{ENOMEM}, \errval{EROFS}, \errval{ELOOP}, @@ -98,11 +98,11 @@ indicato da \param{oldpath}. Per quanto detto la creazione di un nuovo collegamento diretto non copia il contenuto del file, ma si limita a creare una voce nella directory specificata da \param{newpath} e ad aumentare di uno il numero di riferimenti al file (riportato nel campo \var{st\_nlink} della -struttura \struct{stat}, vedi \secref{sec:file_stat}) aggiungendo il nuovo +struttura \struct{stat}, vedi sez.~\ref{sec:file_stat}) aggiungendo il nuovo nome ai precedenti. Si noti che uno stesso file può essere così chiamato con vari nomi in diverse directory. -Per quanto dicevamo in \secref{sec:file_filesystem} la creazione di un +Per quanto dicevamo in sez.~\ref{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 meccanismo non è disponibile ad esempio con il filesystem \acr{vfat} di @@ -113,7 +113,7 @@ filesystem, con l'eccezione delle directory. In alcune versioni di Unix solo l'amministratore è in grado di creare un collegamento diretto ad un'altra directory: questo viene fatto perché con una tale operazione è possibile creare dei \textit{loop} nel filesystem (vedi l'esempio mostrato in -\secref{sec:file_symlink}, dove riprenderemo il discorso) che molti programmi +sez.~\ref{sec:file_symlink}, dove riprenderemo il discorso) che molti programmi non sono in grado di gestire e la cui rimozione diventerebbe estremamente complicata (in genere per questo tipo di errori occorre far girare il programma \cmd{fsck} per riparare il filesystem). @@ -147,8 +147,8 @@ suo prototipo \end{prototype} \footnotetext{questo è un valore specifico ritornato da Linux che non consente - l'uso di \func{unlink} con le directory (vedi \secref{sec:file_remove}). Non - è conforme allo standard POSIX, che prescrive invece l'uso di + l'uso di \func{unlink} con le directory (vedi sez.~\ref{sec:file_remove}). + Non è conforme allo standard POSIX, che prescrive invece l'uso di \errcode{EPERM} in caso l'operazione non sia consentita o il processo non abbia privilegi sufficienti.} @@ -163,15 +163,15 @@ Per cancellare una voce in una directory scrittura su di essa, dato che si va a rimuovere una voce dal suo contenuto, e il diritto di esecuzione sulla directory che la contiene (affronteremo in dettaglio l'argomento dei permessi di file e directory in -\secref{sec:file_access_control}). Se inoltre lo \textit{sticky} bit (vedi -\secref{sec:file_sticky}) è impostato occorrerà anche essere proprietari del +sez.~\ref{sec:file_access_control}). Se inoltre lo \textit{sticky} bit (vedi +sez.~\ref{sec:file_sticky}) è impostato occorrerà anche essere proprietari del file o proprietari della directory (o root, per cui nessuna delle restrizioni è applicata). Una delle caratteristiche di queste funzioni è che la creazione/rimozione del nome dalla directory e l'incremento/decremento del numero di riferimenti nell'inode\index{inode} devono essere effettuati in maniera atomica (si veda -\secref{sec:proc_atom_oper}) senza possibili interruzioni fra le due +sez.~\ref{sec:proc_atom_oper}) senza possibili interruzioni fra le due operazioni. Per questo entrambe queste funzioni sono realizzate tramite una singola system call. @@ -180,7 +180,7 @@ i riferimenti ad esso sono stati cancellati: solo quando il \textit{link count} mantenuto nell'inode\index{inode} diventa zero lo spazio occupato su disco viene rimosso (si ricordi comunque che a questo si aggiunge sempre un'ulteriore condizione,\footnote{come vedremo in - \secref{cha:file_unix_interface} il kernel mantiene anche una tabella dei + cap.~\ref{cha:file_unix_interface} il kernel mantiene anche una tabella dei file aperti nei vari processi, che a sua volta contiene i riferimenti agli inode ad essi relativi. Prima di procedere alla cancellazione dello spazio occupato su disco dal contenuto di un file il kernel controlla anche questa @@ -192,7 +192,7 @@ Questa propriet temporanei su disco in caso di crash dei programmi; la tecnica è quella di aprire il file e chiamare \func{unlink} subito dopo, in questo modo il contenuto del file è sempre disponibile all'interno del processo attraverso il -suo file descriptor (vedi \secref{sec:file_fd}) fintanto che il processo non +suo file descriptor (vedi sez.~\ref{sec:file_fd}) fintanto che il processo non chiude il file, ma non ne resta traccia in nessuna directory, e lo spazio occupato su disco viene immediatamente rilasciato alla conclusione del processo (quando tutti i file vengono chiusi). @@ -203,7 +203,7 @@ processo (quando tutti i file vengono chiusi). Al contrario di quanto avviene con altri Unix, in Linux non è possibile usare \func{unlink} sulle directory; per cancellare una directory si può usare la -funzione \func{rmdir} (vedi \secref{sec:file_dir_creat_rem}), oppure la +funzione \func{rmdir} (vedi sez.~\ref{sec:file_dir_creat_rem}), oppure la funzione \funcd{remove}. Questa è la funzione prevista dallo standard ANSI C per cancellare un file o @@ -305,7 +305,7 @@ riferimento allo stesso file. \subsection{I link simbolici} \label{sec:file_symlink} -Come abbiamo visto in \secref{sec:file_link} la funzione \func{link} crea +Come abbiamo visto in sez.~\ref{sec:file_link} la funzione \func{link} crea riferimenti agli inode\index{inode}, pertanto può funzionare soltanto per file che risiedono sullo stesso filesystem e solo per un filesystem di tipo Unix. Inoltre abbiamo visto che in Linux non è consentito eseguire un link diretto @@ -321,9 +321,9 @@ file che non esistono ancora. Il sistema funziona in quanto i link simbolici sono riconosciuti come tali dal kernel\footnote{è uno dei diversi tipi di file visti in - \tabref{tab:file_file_types}, contrassegnato come tale nell'inode, e + tab.~\ref{tab:file_file_types}, contrassegnato come tale nell'inode, e riconoscibile dal valore del campo \var{st\_mode} della struttura - \struct{stat} (vedi \secref{sec:file_stat}).} per cui alcune funzioni di + \struct{stat} (vedi sez.~\ref{sec:file_stat}).} per cui alcune funzioni di libreria (come \func{open} o \func{stat}) quando ricevono come argomento un link simbolico vengono automaticamente applicate al file da esso specificato. La funzione che permette di creare un nuovo link simbolico è \funcd{symlink}, @@ -356,8 +356,8 @@ che non esiste: in questo caso si ha quello che viene chiamato un \textit{dangling link}, letteralmente un \textsl{link ciondolante}. Come accennato i link simbolici sono risolti automaticamente dal kernel -all'invocazione delle varie system call; in \tabref{tab:file_symb_effect} si è -riportato un elenco dei comportamenti delle varie funzioni di libreria che +all'invocazione delle varie system call; in tab.~\ref{tab:file_symb_effect} si +è riportato un elenco dei comportamenti delle varie funzioni di libreria che operano sui file nei confronti della risoluzione dei link simbolici, specificando quali seguono il link simbolico e quali invece possono operare direttamente sul suo contenuto. @@ -399,10 +399,10 @@ direttamente sul suo contenuto. Si noti che non si è specificato il comportamento delle funzioni che operano con i file descriptor, in quanto la risoluzione del link simbolico viene in genere effettuata dalla funzione che restituisce il file descriptor -(normalmente la \func{open}, vedi \secref{sec:file_open}) e tutte le +(normalmente la \func{open}, vedi sez.~\ref{sec:file_open}) e tutte le operazioni seguenti fanno riferimento solo a quest'ultimo. -Dato che, come indicato in \tabref{tab:file_symb_effect}, funzioni come la +Dato che, come indicato in tab.~\ref{tab:file_symb_effect}, funzioni come la \func{open} seguono i link simbolici, occorrono funzioni apposite per accedere 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 @@ -439,15 +439,15 @@ stringa con un carattere nullo e la tronca alla dimensione specificata da Un caso comune che si può avere con i link simbolici è la creazione dei cosiddetti \textit{loop}. La situazione è illustrata in -\figref{fig:file_link_loop}, che riporta la struttura della directory +fig.~\ref{fig:file_link_loop}, che riporta la struttura della directory \file{/boot}. Come si vede si è creato al suo interno un link simbolico che punta di nuovo a \file{/boot}.\footnote{il loop mostrato in - \figref{fig:file_link_loop} è un usato per poter permettere a \cmd{grub} (un - bootloader in grado di leggere direttamente da vari filesystem il file da - lanciare come sistema operativo) di vedere i file contenuti nella directory - \file{/boot} con lo stesso pathname con cui verrebbero visti dal sistema - operativo, anche se essi si trovano, come accade spesso, su una partizione - separata (che \cmd{grub}, all'avvio, vede come radice).} + fig.~\ref{fig:file_link_loop} è un usato per poter permettere a \cmd{grub} + (un bootloader in grado di leggere direttamente da vari filesystem il file + da lanciare come sistema operativo) di vedere i file contenuti nella + directory \file{/boot} con lo stesso pathname con cui verrebbero visti dal + sistema operativo, anche se essi si trovano, come accade spesso, su una + partizione separata (che \cmd{grub}, all'avvio, vede come radice).} Questo può causare problemi per tutti quei programmi che effettuano la scansione di una directory senza tener conto dei link simbolici, ad esempio se @@ -523,12 +523,12 @@ standard (\file{.} e \file{..}), con il nome indicato dall'argomento \param{dirname}. Il nome può essere indicato sia come pathname assoluto che relativo. -I permessi di accesso alla directory (vedi \secref{sec:file_access_control}) +I permessi di accesso alla directory (vedi sez.~\ref{sec:file_access_control}) sono specificati da \param{mode}, i cui possibili valori sono riportati in -\tabref{tab:file_permission_const}; questi sono modificati dalla maschera di -creazione dei file (si veda \secref{sec:file_umask}). La titolarità della +tab.~\ref{tab:file_permission_const}; questi sono modificati dalla maschera di +creazione dei file (si veda sez.~\ref{sec:file_umask}). La titolarità della nuova directory è impostata secondo quanto riportato in -\secref{sec:file_ownership}. +sez.~\ref{sec:file_ownership}. La funzione per la cancellazione di una directory è \funcd{rmdir}, il suo prototipo è: @@ -571,11 +571,11 @@ consentir \label{sec:file_mknod} Finora abbiamo parlato esclusivamente di file, directory e link simbolici; in -\secref{sec:file_file_types} abbiamo visto però che il sistema prevede pure +sez.~\ref{sec:file_file_types} abbiamo visto però che il sistema prevede pure degli altri tipi di file speciali, come i file di dispositivo \index{file!di dispositivo} e le fifo (i socket\index{socket} sono un caso a parte, che -vedremo in \capref{cha:socket_intro}). +vedremo in cap.~\ref{cha:socket_intro}). La manipolazione delle caratteristiche di questi file e la loro cancellazione può essere effettuata con le stesse funzioni che operano sui file regolari; ma @@ -608,9 +608,9 @@ di queste funzioni La funzione permette di creare un file speciale, ma si può usare anche per creare file regolari e fifo; l'argomento \param{mode} specifica il tipo di file che si vuole creare ed i relativi permessi, secondo i valori riportati in -\tabref{tab:file_mode_flags}, che vanno combinati con un OR binario. I +tab.~\ref{tab:file_mode_flags}, che vanno combinati con un OR binario. I permessi sono comunque modificati nella maniera usuale dal valore di -\var{umask} (si veda \secref{sec:file_umask}). +\var{umask} (si veda sez.~\ref{sec:file_umask}). Per il tipo di file può essere specificato solo uno fra: \const{S\_IFREG} per un file regolare (che sarà creato vuoto), \const{S\_IFBLK} per un device a @@ -628,11 +628,11 @@ agli utenti normali. I nuovi inode\index{inode} creati con \func{mknod} apparterranno al proprietario e al gruppo del processo che li ha creati, a meno che non si sia attivato il bit \acr{sgid} per la directory o sia stata attivata la semantica -BSD per il filesystem (si veda \secref{sec:file_ownership}) in cui si va a +BSD per il filesystem (si veda sez.~\ref{sec:file_ownership}) in cui si va a creare l'inode\index{inode}. Per creare una fifo (un file speciale, su cui torneremo in dettaglio in -\secref{sec:ipc_named_pipe}) lo standard POSIX specifica l'uso della funzione +sez.~\ref{sec:ipc_named_pipe}) lo standard POSIX specifica l'uso della funzione \funcd{mkfifo}, il cui prototipo è: \begin{functions} \headdecl{sys/types.h} \headdecl{sys/stat.h} @@ -667,17 +667,17 @@ inserirvi direttamente delle voci con le usuali funzioni di scrittura. Ma se la scrittura e l'aggiornamento dei dati delle directory è compito del kernel, sono molte le situazioni in cui i processi necessitano di poterne leggere il contenuto. Benché questo possa essere fatto direttamente (vedremo -in \secref{sec:file_open} che è possibile aprire una directory come se fosse +in sez.~\ref{sec:file_open} che è possibile aprire una directory come se fosse un file, anche se solo in sola lettura) in generale il formato con cui esse sono scritte può dipendere dal tipo di filesystem, tanto che, come riportato -in \tabref{tab:file_file_operations}, il VFS del kernel prevede una apposita +in tab.~\ref{tab:file_file_operations}, il VFS del kernel prevede una apposita funzione per la lettura delle directory. Tutto questo si riflette nello standard POSIX\footnote{le funzioni sono previste pure in BSD e SVID.} che ha introdotto una apposita interfaccia per la lettura delle directory, basata sui cosiddetti \textit{directory stream} (chiamati così per l'analogia con i file stream dell'interfaccia standard di -\capref{cha:files_std_interface}). La prima funzione di questa interfaccia è +cap.~\ref{cha:files_std_interface}). La prima funzione di questa interfaccia è \funcd{opendir}, il cui prototipo è: \begin{functions} \headdecl{sys/types.h} \headdecl{dirent.h} @@ -720,8 +720,8 @@ La funzione\footnote{questa funzione descriptor associato al \textit{directory stream} \param{dir}, essa è disponibile solo definendo \macro{\_BSD\_SOURCE} o \macro{\_SVID\_SOURCE}. Di solito si utilizza questa funzione in abbinamento alla funzione \func{fchdir} -per cambiare la directory di lavoro (vedi \secref{sec:file_work_dir}) a quella -relativa allo stream che si sta esaminando. +per cambiare la directory di lavoro (vedi sez.~\ref{sec:file_work_dir}) a +quella relativa allo stream che si sta esaminando. La lettura di una voce della directory viene effettuata attraverso la funzione \funcd{readdir}; il suo prototipo è: @@ -745,7 +745,7 @@ cui definizione\footnote{la definizione nel file \file{/usr/include/bits/dirent.h}, essa non contempla la presenza del campo \var{d\_namlen} che indica la lunghezza del nome del file (ed infatti la macro \macro{\_DIRENT\_HAVE\_D\_NAMLEN} non è definita).} è -riportata in \figref{fig:file_dirent_struct}). La funzione restituisce il +riportata in fig.~\ref{fig:file_dirent_struct}). La funzione restituisce il puntatore alla struttura; si tenga presente però che quest'ultima è allocata staticamente, per cui viene sovrascritta tutte le volte che si ripete la lettura di una voce sullo stesso stream. @@ -828,7 +828,7 @@ indica il tipo di file (fifo, directory, link simbolico, ecc.); i suoi possibili valori\footnote{fino alla versione 2.1 delle \acr{glibc} questo campo, pur presente nella struttura, non è implementato, e resta sempre al valore \const{DT\_UNKNOWN}.} sono riportati in -\tabref{tab:file_dtype_macro}; per la conversione da e verso l'analogo valore +tab.~\ref{tab:file_dtype_macro}; per la conversione da e verso l'analogo valore mantenuto dentro il campo \var{st\_mode} di \struct{stat} sono definite anche due macro di conversione \macro{IFTODT} e \macro{DTTOIF}: \begin{functions} @@ -949,10 +949,10 @@ del numero di versione (cio dopo \func{file4}.) Un semplice esempio dell'uso di queste funzioni è riportato in -\figref{fig:file_my_ls}, dove si è riportata la sezione principale di un +fig.~\ref{fig:file_my_ls}, dove si è riportata la sezione principale di un programma che, usando la routine di scansione illustrata in -\figref{fig:file_dirscan}, stampa i nomi dei file contenuti in una directory e -la relativa dimensione (in sostanza una versione semplificata del comando +fig.~\ref{fig:file_dirscan}, stampa i nomi dei file contenuti in una directory +e la relativa dimensione (in sostanza una versione semplificata del comando \cmd{ls}). \begin{figure}[!htb] @@ -965,7 +965,7 @@ la relativa dimensione (in sostanza una versione semplificata del comando \label{fig:file_my_ls} \end{figure} -Il programma è estremamente semplice; in \figref{fig:file_my_ls} si è omessa +Il programma è estremamente semplice; in fig.~\ref{fig:file_my_ls} si è omessa la parte di gestione delle opzioni (che prevede solo l'uso di una funzione per la stampa della sintassi, anch'essa omessa) ma il codice completo potrà essere trovato coi sorgenti allegati nel file \file{myls.c}. @@ -998,23 +998,23 @@ valore di ritorno per indicare una esecuzione senza errori. \end{figure} Tutto il grosso del lavoro è svolto dalla funzione \func{DirScan}, riportata -in \figref{fig:file_dirscan}. La funzione è volutamente generica e permette di -eseguire una funzione, passata come secondo argomento, su tutte le voci di una -directory. La funzione inizia con l'aprire (\texttt{\small 19--23}) uno +in fig.~\ref{fig:file_dirscan}. La funzione è volutamente generica e permette +di eseguire una funzione, passata come secondo argomento, su tutte le voci di +una directory. La funzione inizia con l'aprire (\texttt{\small 19--23}) uno stream sulla directory passata come primo argomento, stampando un messaggio in caso di errore. Il passo successivo (\texttt{\small 24--25}) è cambiare directory di lavoro -(vedi \secref{sec:file_work_dir}), usando in sequenza le funzione \func{dirfd} -e \func{fchdir} (in realtà si sarebbe potuto usare direttamente \func{chdir} -su \var{dirname}), in modo che durante il successivo ciclo (\texttt{\small - 27--31}) sulle singole voci dello stream ci si trovi all'interno della -directory.\footnote{questo è essenziale al funzionamento della funzione - \code{do\_ls} (e ad ogni funzione che debba usare il campo \var{d\_name}, in - quanto i nomi dei file memorizzati all'interno di una struttura - \struct{dirent} sono sempre relativi alla directory in questione, e senza - questo posizionamento non si sarebbe potuto usare \func{stat} per ottenere - le dimensioni.} +(vedi sez.~\ref{sec:file_work_dir}), usando in sequenza le funzione +\func{dirfd} e \func{fchdir} (in realtà si sarebbe potuto usare direttamente +\func{chdir} su \var{dirname}), in modo che durante il successivo ciclo +(\texttt{\small 27--31}) sulle singole voci dello stream ci si trovi +all'interno della directory.\footnote{questo è essenziale al funzionamento + della funzione \code{do\_ls} (e ad ogni funzione che debba usare il campo + \var{d\_name}, in quanto i nomi dei file memorizzati all'interno di una + struttura \struct{dirent} sono sempre relativi alla directory in questione, + e senza questo posizionamento non si sarebbe potuto usare \func{stat} per + ottenere le dimensioni.} Avendo usato lo stratagemma di fare eseguire tutte le manipolazioni necessarie alla funzione passata come secondo argomento, il ciclo di scansione della @@ -1050,7 +1050,7 @@ Quando un utente effettua il login, questa directory viene impostata alla consente di cambiarla a piacere, spostandosi da una directory ad un'altra, il comando \cmd{pwd} la stampa sul terminale. Siccome la directory corrente resta la stessa quando viene creato un processo figlio (vedi -\secref{sec:proc_fork}), la directory corrente della shell diventa anche la +sez.~\ref{sec:proc_fork}), la directory corrente della shell diventa anche la directory corrente di qualunque comando da essa lanciato. In genere il kernel tiene traccia per ciascun processo dell'inode\index{inode} @@ -1087,14 +1087,14 @@ per una dimensione pari a \param{size} qualora questa sia diversa da zero, o della lunghezza esatta del pathname altrimenti. In questo caso ci si deve ricordare di disallocare la stringa una volta cessato il suo utilizzo. -Di questa funzione esiste una versione \code{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 +Di questa funzione esiste una versione \code{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 \const{PATH\_MAX} (di solito 256 byte, vedi -\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. +sez.~\ref{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. Una seconda funzione simile è \code{char *get\_current\_dir\_name(void)} che è sostanzialmente equivalente ad una \code{getcwd(NULL, 0)}, con la sola @@ -1151,7 +1151,7 @@ prima vista. Infatti anche se sembrerebbe banale generare un nome a caso e creare il file dopo aver controllato che questo non esista, nel momento fra il controllo e la creazione si ha giusto lo spazio per una possibile \textit{race condition}\index{race condition} (si ricordi quanto visto in -\secref{sec:proc_race_cond}). +sez.~\ref{sec:proc_race_cond}). Le \acr{glibc} provvedono varie funzioni per generare nomi di file temporanei, di cui si abbia certezza di unicità (al momento della generazione); la prima @@ -1194,7 +1194,7 @@ la prima valida delle seguenti: \begin{itemize*} \item La variabile di ambiente \const{TMPNAME} (non ha effetto se non è definita o se il programma chiamante è \acr{suid} o \acr{sgid}, vedi - \secref{sec:file_suid_sgid}). + sez.~\ref{sec:file_suid_sgid}). \item il valore dell'argomento \param{dir} (se diverso da \val{NULL}). \item Il valore della costante \const{P\_tmpdir}. \item la directory \file{/tmp}. @@ -1225,7 +1225,7 @@ POSIX definisce la funzione \funcd{tempfile}, il cui prototipo \errval{ENOSPC}, \errval{EROFS} e \errval{EACCES}.} \end{prototype} \noindent essa restituisce direttamente uno stream già aperto (in modalità -\code{r+b}, si veda \secref{sec:file_fopen}) e pronto per l'uso, che viene +\code{r+b}, si veda sez.~\ref{sec:file_fopen}) e pronto per l'uso, che viene automaticamente cancellato alla sua chiusura o all'uscita dal programma. Lo standard non specifica in quale directory verrà aperto il file, ma le \acr{glibc} prima tentano con \const{P\_tmpdir} e poi con \file{/tmp}. Questa @@ -1277,12 +1277,12 @@ prototipo \noindent come per \func{mktemp} anche in questo caso \param{template} non può essere una stringa costante. La funzione apre un file in lettura/scrittura con la funzione \func{open}, usando l'opzione \const{O\_EXCL} (si veda -\secref{sec:file_open}), in questo modo al ritorno della funzione si ha la +sez.~\ref{sec:file_open}), in questo modo al ritorno della funzione si ha la certezza di essere i soli utenti del file. I permessi sono impostati al valore \code{0600}\footnote{questo è vero a partire dalle \acr{glibc} 2.0.7, le versioni precedenti delle \acr{glibc} e le vecchie \acr{libc5} e \acr{libc4} usavano il valore \code{0666} che permetteva a chiunque di leggere i - contenuti del file.} (si veda \secref{sec:file_perm_overview}). + contenuti del file.} (si veda sez.~\ref{sec:file_perm_overview}). In OpenBSD è stata introdotta un'altra funzione\footnote{introdotta anche in Linux a partire dalle \acr{glibc} 2.1.91.} simile alle precedenti, @@ -1300,7 +1300,7 @@ In OpenBSD più gli altri eventuali codici di errore di \func{mkdir}.} \end{prototype} \noindent la directory è creata con permessi \code{0700} (al solito si veda -\capref{cha:file_unix_interface} per i dettagli); dato che la creazione della +cap.~\ref{cha:file_unix_interface} per i dettagli); dato che la creazione della directory è sempre esclusiva i precedenti problemi di \textit{race condition}\index{race condition} non si pongono. @@ -1308,7 +1308,7 @@ directory \section{La manipolazione delle caratteristiche dei files} \label{sec:file_infos} -Come spiegato in \secref{sec:file_filesystem} tutte le informazioni generali +Come spiegato in sez.~\ref{sec:file_filesystem} tutte le informazioni generali relative alle caratteristiche di ciascun file, a partire dalle informazioni relative al controllo di accesso, sono mantenute nell'inode\index{inode}. @@ -1317,7 +1317,7 @@ usando la funzione \func{stat}, che permette l'accesso a tutti i dati memorizzati nell'inode\index{inode}; esamineremo poi le varie funzioni usate per manipolare tutte queste informazioni (eccetto quelle che riguardano la gestione del controllo di accesso, trattate in in -\secref{sec:file_access_control}). +sez.~\ref{sec:file_access_control}). \subsection{Le funzioni \func{stat}, \func{fstat} e \func{lstat}} @@ -1355,7 +1355,7 @@ su un file, su un link simbolico e su un file descriptor. La struttura \struct{stat} usata da queste funzioni è definita nell'header \file{sys/stat.h} e in generale dipende dall'implementazione; la versione -usata da Linux è mostrata in \figref{fig:file_stat_struct}, così come +usata da Linux è mostrata in fig.~\ref{fig:file_stat_struct}, così come riportata dalla pagina di manuale di \func{stat} (in realtà la definizione effettivamente usata nel kernel dipende dall'architettura e ha altri campi riservati per estensioni come tempi più precisi, o per il padding dei campi). @@ -1374,13 +1374,13 @@ riservati per estensioni come tempi pi Si noti come i vari membri della struttura siano specificati come tipi primitivi del sistema (di quelli definiti in -\tabref{tab:intro_primitive_types}, e dichiarati in \file{sys/types.h}). +tab.~\ref{tab:intro_primitive_types}, e dichiarati in \file{sys/types.h}). \subsection{I tipi di file} \label{sec:file_types} -Come riportato in \tabref{tab:file_file_types} in Linux oltre ai file e alle +Come riportato in tab.~\ref{tab:file_file_types} in Linux oltre ai file e alle directory esistono altri oggetti che possono stare su un filesystem. Il tipo di file è ritornato dalla \func{stat} come maschera binaria nel campo \var{st\_mode} (che contiene anche le informazioni relative ai permessi). @@ -1390,7 +1390,7 @@ standard POSIX definisce un insieme di macro per verificare il tipo di file, queste vengono usate anche da Linux che supporta pure le estensioni allo standard per i link simbolici e i socket\index{socket} definite da BSD; l'elenco completo delle macro con cui è possibile estrarre l'informazione da -\var{st\_mode} è riportato in \tabref{tab:file_type_macro}. +\var{st\_mode} è riportato in tab.~\ref{tab:file_type_macro}. \begin{table}[htb] \centering \footnotesize @@ -1412,13 +1412,13 @@ l'elenco completo delle macro con cui \label{tab:file_type_macro} \end{table} -Oltre alle macro di \tabref{tab:file_type_macro} è possibile usare +Oltre alle macro di tab.~\ref{tab:file_type_macro} è possibile usare direttamente il valore di \var{st\_mode} per ricavare il tipo di file controllando direttamente i vari bit in esso memorizzati. Per questo sempre in \file{sys/stat.h} sono definite le costanti numeriche riportate in -\tabref{tab:file_mode_flags}. +tab.~\ref{tab:file_mode_flags}. -Il primo valore dell'elenco di \tabref{tab:file_mode_flags} è la maschera +Il primo valore dell'elenco di tab.~\ref{tab:file_mode_flags} è la maschera binaria che permette di estrarre i bit nei quali viene memorizzato il tipo di file, i valori successivi sono le costanti corrispondenti ai singoli bit, e possono essere usati per effettuare la selezione sul tipo di file voluto, con @@ -1491,7 +1491,7 @@ Si tenga conto che la lunghezza del file riportata in \var{st\_size} non detto che corrisponda all'occupazione dello spazio su disco per via della possibile esistenza dei cosiddetti \textit{holes} (letteralmente \textsl{buchi}) che si formano tutte le volte che si va a scrivere su un file -dopo aver eseguito una \func{lseek} (vedi \secref{sec:file_lseek}) oltre la +dopo aver eseguito una \func{lseek} (vedi sez.~\ref{sec:file_lseek}) oltre la sua fine. In questo caso si avranno risultati differenti a seconda del modo in cui si @@ -1550,10 +1550,10 @@ zeri (e in genere si ha la creazione di un \textit{hole} nel file). Il sistema mantiene per ciascun file tre tempi. Questi sono registrati nell'inode\index{inode} insieme agli altri attributi del file e possono essere letti tramite la funzione \func{stat}, che li restituisce attraverso tre campi -della struttura \struct{stat} di \figref{fig:file_stat_struct}. Il significato -di detti tempi e dei relativi campi è riportato nello schema in -\tabref{tab:file_file_times}, dove è anche riportato un esempio delle funzioni -che effettuano cambiamenti su di essi. +della struttura \struct{stat} di fig.~\ref{fig:file_stat_struct}. Il +significato di detti tempi e dei relativi campi è riportato nello schema in +tab.~\ref{tab:file_file_times}, dove è anche riportato un esempio delle +funzioni che effettuano cambiamenti su di essi. \begin{table}[htb] \centering @@ -1596,7 +1596,7 @@ quali file necessitano di essere ricompilati o (talvolta insieme anche al tempo di cambiamento di stato) per decidere quali file devono essere archiviati per il backup. Il comando \cmd{ls} (quando usato con le opzioni \cmd{-l} o \cmd{-t}) mostra i tempi dei file secondo lo schema riportato -nell'ultima colonna di \tabref{tab:file_file_times}. +nell'ultima colonna di tab.~\ref{tab:file_file_times}. \begin{table}[htb] \centering @@ -1672,7 +1672,7 @@ nell'ultima colonna di \tabref{tab:file_file_times}. \end{table} L'effetto delle varie funzioni di manipolazione dei file sui tempi è -illustrato in \tabref{tab:file_times_effects}. Si sono riportati gli effetti +illustrato in tab.~\ref{tab:file_times_effects}. Si sono riportati gli effetti sia per il file a cui si fa riferimento, sia per la directory che lo contiene; questi ultimi possono essere capiti se si tiene conto di quanto già detto, e cioè che anche le directory sono file (che contengono una lista di nomi) che @@ -1714,7 +1714,7 @@ di \param{times}. Se questa La funzione prende come argomento \param{times} una struttura \struct{utimebuf}, la cui definizione è riportata in -\figref{fig:struct_utimebuf}, con la quale si possono specificare i nuovi +fig.~\ref{fig:struct_utimebuf}, con la quale si possono specificare i nuovi valori che si vogliono impostare per tempi. \begin{figure}[!htb] @@ -1766,7 +1766,7 @@ cosiddetto \textit{owner}) ed un gruppo di appartenenza, secondo il meccanismo 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 \secref{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 @@ -1813,13 +1813,13 @@ rispettivamente al proprietario, al gruppo, a tutti gli altri. I restanti tre bit (noti come \acr{suid}, \acr{sgid}, e \textsl{sticky}) sono usati per indicare alcune caratteristiche più complesse del meccanismo del controllo di accesso su cui torneremo in seguito (in -\secref{sec:file_suid_sgid} e \secref{sec:file_sticky}); lo schema di -allocazione dei bit è riportato in \figref{fig:file_perm_bit}. +sez.~\ref{sec:file_suid_sgid} e sez.~\ref{sec:file_sticky}); lo schema di +allocazione dei bit è riportato in fig.~\ref{fig:file_perm_bit}. Anche i permessi, come tutte le altre informazioni pertinenti al file, sono memorizzati nell'inode\index{inode}; in particolare essi sono contenuti in alcuni bit del campo \var{st\_mode} della struttura \struct{stat} (si veda di -nuovo \figref{fig:file_stat_struct}). +nuovo fig.~\ref{fig:file_stat_struct}). In genere ci si riferisce ai tre livelli dei privilegi usando le lettere \cmd{u} (per \textit{user}), \cmd{g} (per \textit{group}) e \cmd{o} (per @@ -1829,7 +1829,7 @@ distinzione dato che in certi casi, mutuando la terminologia in uso nel VMS, si parla dei permessi base come di permessi per \textit{owner}, \textit{group} ed \textit{all}, le cui iniziali possono dar luogo a confusione. Le costanti che permettono di accedere al valore numerico di questi bit nel campo -\var{st\_mode} sono riportate in \tabref{tab:file_bit_perm}. +\var{st\_mode} sono riportate in tab.~\ref{tab:file_bit_perm}. \begin{table}[htb] \centering @@ -1878,7 +1878,7 @@ permessi opportuni per il medesimo) ma non si potr directory). Avere il permesso di lettura per un file consente di aprirlo con le opzioni -(si veda quanto riportato in \tabref{tab:file_open_flags}) di sola lettura o +(si veda quanto riportato in tab.~\ref{tab:file_open_flags}) di sola lettura o di lettura/scrittura e leggerne il contenuto. Avere il permesso di scrittura consente di aprire un file in sola scrittura o lettura/scrittura e modificarne il contenuto, lo stesso permesso è necessario per poter troncare il file. @@ -1902,7 +1902,7 @@ simbolico tutti i permessi come concessi; utente e gruppo a cui esso appartiene vengono pure ignorati quando il link viene risolto, vengono controllati solo quando viene richiesta la rimozione del link e quest'ultimo è in una directory con lo \textsl{sticky bit} impostato (si veda -\secref{sec:file_sticky}). +sez.~\ref{sec:file_sticky}). La procedura con cui il kernel stabilisce se un processo possiede un certo permesso (di lettura, scrittura o esecuzione) si basa sul confronto fra @@ -1911,13 +1911,13 @@ l'utente e il gruppo a cui il file appartiene (i valori di \var{st\_uid} e effettivo e gli eventuali group-ID supplementari del processo.\footnote{in realtà Linux, per quanto riguarda l'accesso ai file, utilizza gli gli identificatori del gruppo \textit{filesystem} (si ricordi quanto esposto in - \secref{sec:proc_perms}), ma essendo questi del tutto equivalenti ai primi, + sez.~\ref{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 -\secref{sec:file_suid_sgid}, l'user-ID effettivo e il group-ID effettivo +veda sez.~\ref{sec:proc_perms}; normalmente, a parte quanto vedremo in +sez.~\ref{sec:file_suid_sgid}, l'user-ID effettivo e il group-ID effettivo corrispondono ai valori dell'\acr{uid} e del \acr{gid} dell'utente che ha lanciato il processo, mentre i group-ID supplementari sono quelli dei gruppi cui l'utente appartiene. @@ -1961,7 +1961,7 @@ tutti gli altri non vengono controllati. \subsection{I bit \acr{suid} e \acr{sgid}} \label{sec:file_suid_sgid} -Come si è accennato (in \secref{sec:file_perm_overview}) nei dodici bit del +Come si è accennato (in sez.~\ref{sec:file_perm_overview}) nei dodici bit del campo \var{st\_mode} di \struct{stat} che vengono usati per il controllo di accesso oltre ai bit dei permessi veri e propri, ci sono altri tre bit che vengono usati per indicare alcune proprietà speciali dei file. Due di questi @@ -1969,7 +1969,7 @@ sono i bit detti \acr{suid} (da \textit{set-user-ID bit}) e \acr{sgid} (da \textit{set-group-ID bit}) che sono identificati dalle costanti \const{S\_ISUID} e \const{S\_ISGID}. -Come spiegato in dettaglio in \secref{sec:proc_exec}, quando si lancia un +Come spiegato in dettaglio in sez.~\ref{sec:proc_exec}, quando si lancia un programma il comportamento normale del kernel è quello di impostare gli identificatori del gruppo \textit{effective} del nuovo processo al valore dei corrispondenti del gruppo \textit{real} del processo corrente, che normalmente @@ -1996,7 +1996,7 @@ 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 per evitare che possano essere usati per guadagnare privilegi non consentiti (l'argomento è affrontato in -dettaglio in \secref{sec:proc_perms}). +dettaglio in sez.~\ref{sec:proc_perms}). La presenza dei bit \acr{suid} e \acr{sgid} su un file può essere rilevata con il comando \cmd{ls -l}, che visualizza una lettera \cmd{s} al posto della @@ -2004,19 +2004,19 @@ il comando \cmd{ls -l}, che visualizza una lettera \cmd{s} al posto della \cmd{s} può essere usata nel comando \cmd{chmod} per impostare questi bit. Infine questi bit possono essere controllati all'interno di \var{st\_mode} con l'uso delle due costanti \const{S\_ISUID} e \const{S\_IGID}, i cui valori sono -riportati in \tabref{tab:file_mode_flags}. +riportati in tab.~\ref{tab:file_mode_flags}. Gli stessi bit vengono ad assumere in significato completamente diverso per le directory, normalmente infatti Linux usa la convenzione di SVr4 per indicare con questi bit l'uso della semantica BSD nella creazione di nuovi file (si -veda \secref{sec:file_ownership} per una spiegazione dettagliata al +veda sez.~\ref{sec:file_ownership} per una spiegazione dettagliata al proposito). Infine Linux utilizza il bit \acr{sgid} per una ulteriore estensione mutuata da SVr4. Il caso in cui un file ha il bit \acr{sgid} impostato senza che lo sia anche il corrispondente bit di esecuzione viene utilizzato per attivare per quel file il \textit{mandatory locking} (affronteremo questo argomento in -dettaglio più avanti, in \secref{sec:file_mand_locking}). +dettaglio più avanti, in sez.~\ref{sec:file_mand_locking}). \subsection{Il bit \textsl{sticky}} @@ -2029,7 +2029,7 @@ ottenere la massima velocit si poteva impostare questo bit. L'effetto di questo bit era che il segmento di testo del programma (si veda -\secref{sec:proc_mem_layout} per i dettagli) veniva scritto nella swap la +sez.~\ref{sec:proc_mem_layout} per i dettagli) veniva scritto nella swap la prima volta che questo veniva lanciato, e vi permaneva fino al riavvio della macchina (da questo il nome di \textsl{sticky bit}); essendo la swap un file continuo indicizzato direttamente in questo modo si poteva risparmiare in @@ -2072,12 +2072,12 @@ consapevolmente, cancellare i file temporanei creati degli altri utenti. \subsection{La titolarità di nuovi file e directory} \label{sec:file_ownership} -Vedremo in \secref{sec:file_base_func} con quali funzioni si possono creare +Vedremo in sez.~\ref{sec:file_base_func} con quali funzioni si possono creare nuovi file, in tale occasione vedremo che è possibile specificare in sede di creazione quali permessi applicare ad un file, però non si può indicare a quale utente e gruppo esso deve appartenere. Lo stesso problema si presenta per la creazione di nuove directory (procedimento descritto in -\secref{sec:file_dir_creat_rem}). +sez.~\ref{sec:file_dir_creat_rem}). Lo standard POSIX prescrive che l'\acr{uid} del nuovo file corrisponda all'user-ID effettivo del processo che lo crea; per il \acr{gid} invece prevede @@ -2108,13 +2108,13 @@ con il \acr{gid} del gruppo primario dello stesso. \subsection{La funzione \func{access}} \label{sec:file_access} -Come visto in \secref{sec:file_access_control} il controllo di accesso ad un -file viene fatto utilizzando l'user-ID ed il group-ID effettivo del processo; ci -sono casi però in cui si può voler effettuare il controllo con l'user-ID reale -ed il group-ID reale, vale a dire usando i valori di \acr{uid} e \acr{gid} -relativi all'utente che ha lanciato il programma, e che, come accennato in -\secref{sec:file_suid_sgid} e spiegato in dettaglio in -\secref{sec:proc_perms}, non è detto siano uguali a quelli effettivi. +Come visto in sez.~\ref{sec:file_access_control} il controllo di accesso ad un +file viene fatto utilizzando l'user-ID ed il group-ID effettivo del processo; +ci sono casi però in cui si può voler effettuare il controllo con l'user-ID +reale ed il group-ID reale, vale a dire usando i valori di \acr{uid} e +\acr{gid} relativi all'utente che ha lanciato il programma, e che, come +accennato in sez.~\ref{sec:file_suid_sgid} e spiegato in dettaglio in +sez.~\ref{sec:proc_perms}, non è detto siano uguali a quelli effettivi. Per far questo si può usare la funzione \funcd{access}, il cui prototipo è: \begin{prototype}{unistd.h} @@ -2139,12 +2139,12 @@ Verifica i permessi di accesso. La funzione verifica i permessi di accesso, indicati da \param{mode}, per il file indicato da \param{pathname}. I valori possibili per l'argomento \param{mode} sono esprimibili come combinazione delle costanti numeriche -riportate in \tabref{tab:file_access_mode_val} (attraverso un OR binario delle -stesse). I primi tre valori implicano anche la verifica dell'esistenza del -file, se si vuole verificare solo quest'ultima si può usare \const{F\_OK}, o -anche direttamente \func{stat}. Nel caso in cui \param{pathname} si riferisca -ad un link simbolico, questo viene seguito ed il controllo è fatto sul file a -cui esso fa riferimento. +riportate in tab.~\ref{tab:file_access_mode_val} (attraverso un OR binario +delle stesse). I primi tre valori implicano anche la verifica dell'esistenza +del file, se si vuole verificare solo quest'ultima si può usare \const{F\_OK}, +o anche direttamente \func{stat}. Nel caso in cui \param{pathname} si +riferisca ad un link simbolico, questo viene seguito ed il controllo è fatto +sul file a cui esso fa riferimento. La funzione controlla solo i bit dei permessi di accesso, si ricordi che il fatto che una directory abbia permesso di scrittura non significa che ci si @@ -2207,7 +2207,7 @@ filename e su un file descriptor, i loro prototipi sono: Entrambe le funzioni utilizzano come secondo argomento \param{mode}, una variabile dell'apposito tipo primitivo \type{mode\_t} (vedi -\tabref{tab:intro_primitive_types}) utilizzato per specificare i permessi sui +tab.~\ref{tab:intro_primitive_types}) utilizzato per specificare i permessi sui file. \begin{table}[!htb] @@ -2244,12 +2244,13 @@ file. \end{table} Le costanti con cui specificare i singoli bit di \param{mode} sono riportate -in \tabref{tab:file_permission_const}. Il valore di \param{mode} può essere +in tab.~\ref{tab:file_permission_const}. Il valore di \param{mode} può essere ottenuto combinando fra loro con un OR binario le costanti simboliche relative ai vari bit, o specificato direttamente, come per l'omonimo comando di shell, con un valore numerico (la shell lo vuole in ottale, dato che i bit dei permessi sono divisibili in gruppi di tre), che si può calcolare direttamente -usando lo schema si utilizzo dei bit illustrato in \figref{fig:file_perm_bit}. +usando lo schema si utilizzo dei bit illustrato in +fig.~\ref{fig:file_perm_bit}. Ad esempio i permessi standard assegnati ai nuovi file (lettura e scrittura per il proprietario, sola lettura per il gruppo e gli altri) sono @@ -2272,7 +2273,7 @@ in particolare accade che: l'user-ID effettivo del processo non è zero esso viene automaticamente cancellato (senza notifica di errore) qualora sia stato indicato in \param{mode}. -\item per quanto detto in \secref{sec:file_ownership} riguardo la creazione +\item per quanto detto in sez.~\ref{sec:file_ownership} riguardo la creazione dei nuovi file, si può avere il caso in cui il file creato da un processo è assegnato a un gruppo per il quale il processo non ha privilegi. Per evitare che si possa assegnare il bit \acr{sgid} ad un file appartenente a un gruppo @@ -2297,7 +2298,7 @@ perdita di questo privilegio. Le funzioni \func{chmod} e \func{fchmod} ci permettono di modificare i permessi di un file, resta però il problema di quali sono i permessi assegnati quando il file viene creato. Le funzioni dell'interfaccia nativa di Unix, come -vedremo in \secref{sec:file_open}, permettono di indicare esplicitamente i +vedremo in sez.~\ref{sec:file_open}, permettono di indicare esplicitamente i permessi di creazione di un file, ma questo non è possibile per le funzioni dell'interfaccia standard ANSI C che non prevede l'esistenza di utenti e gruppi, ed inoltre il problema si pone anche per l'interfaccia nativa quando i @@ -2306,10 +2307,10 @@ permessi non vengono indicati esplicitamente. In tutti questi casi l'unico riferimento possibile è quello della modalità di apertura del nuovo file (lettura/scrittura o sola lettura), che però può fornire un valore che è lo stesso per tutti e tre i permessi di -\secref{sec:file_perm_overview} (cioè $666$ nel primo caso e $222$ nel +sez.~\ref{sec:file_perm_overview} (cioè $666$ nel primo caso e $222$ nel secondo). Per questo motivo il sistema associa ad ogni processo\footnote{è infatti contenuta nel campo \var{umask} della struttura \struct{fs\_struct}, - vedi \figref{fig:proc_task_struct}.} una maschera di bit, la cosiddetta + vedi fig.~\ref{fig:proc_task_struct}.} una maschera di bit, la cosiddetta \textit{umask}, che viene utilizzata per impedire che alcuni permessi possano essere assegnati ai nuovi file in sede di creazione. I bit indicati nella maschera vengono infatti cancellati dai permessi quando un nuovo file viene @@ -2391,8 +2392,8 @@ che per il file %La struttura fondamentale che contiene i dati essenziali relativi ai file è il %cosiddetto \textit{inode}; questo conterrà informazioni come il %tipo di file (file di dispositivo, directory, file di dati, per un elenco -%completo vedi \ntab), i permessi (vedi \secref{sec:file_perms}), le date (vedi -%\secref{sec:file_times}). +%completo vedi \ntab), i permessi (vedi sez.~\ref{sec:file_perms}), le date (vedi +%sez.~\ref{sec:file_times}). \subsection{Un quadro d'insieme sui permessi} @@ -2403,11 +2404,11 @@ il significato dei singoli bit dei permessi sui file, vale la pena fare un riepilogo in cui si riassumono le caratteristiche di ciascuno di essi, in modo da poter fornire un quadro d'insieme. -In \tabref{tab:file_fileperm_bits} si sono riassunti gli effetti dei vari bit -per un file; per quanto riguarda l'applicazione dei permessi per proprietario, -gruppo ed altri si ricordi quanto illustrato in -\secref{sec:file_perm_overview}. Si rammenti che il valore dei permessi non ha -alcun effetto qualora il processo possieda i privilegi di amministratore. +In tab.~\ref{tab:file_fileperm_bits} si sono riassunti gli effetti dei vari +bit per un file; per quanto riguarda l'applicazione dei permessi per +proprietario, gruppo ed altri si ricordi quanto illustrato in +sez.~\ref{sec:file_perm_overview}. Si rammenti che il valore dei permessi non +ha alcun effetto qualora il processo possieda i privilegi di amministratore. \begin{table}[!htb] \centering @@ -2445,12 +2446,12 @@ alcun effetto qualora il processo possieda i privilegi di amministratore. Per compattezza, nella tabella si sono specificati i bit di \acr{suid}, \acr{sgid} e \acr{sticky} con la notazione illustrata anche in -\figref{fig:file_perm_bit}. +fig.~\ref{fig:file_perm_bit}. -In \tabref{tab:file_dirperm_bits} si sono invece riassunti gli effetti dei +In tab.~\ref{tab:file_dirperm_bits} si sono invece riassunti gli effetti dei vari bit dei permessi per una directory; anche in questo caso si sono specificati i bit di \acr{suid}, \acr{sgid} e \acr{sticky} con la notazione -compatta illustrata in \figref{fig:file_perm_bit}. +compatta illustrata in fig.~\ref{fig:file_perm_bit}. \begin{table}[!htb] \centering @@ -2499,12 +2500,12 @@ Bench programma ad una sezione limitata del filesystem, per cui ne parleremo in questa sezione. -Come accennato in \secref{sec:proc_fork} ogni processo oltre ad una directory +Come accennato in sez.~\ref{sec:proc_fork} ogni processo oltre ad una directory di lavoro, ha anche una directory \textsl{radice}\footnote{entrambe sono contenute in due campi (rispettivamente \var{pwd} e \var{root}) di - \struct{fs\_struct}; vedi \figref{fig:proc_task_struct}.} che, pur essendo + \struct{fs\_struct}; vedi fig.~\ref{fig:proc_task_struct}.} che, pur essendo di norma corrispondente alla radice dell'albero di file e directory come visto -dal kernel (ed illustrato in \secref{sec:file_organization}), ha per il +dal kernel (ed illustrato in sez.~\ref{sec:file_organization}), ha per il processo il significato specifico di directory rispetto alla quale vengono risolti i pathname assoluti.\footnote{cioè quando un processo chiede la risoluzione di un pathname, il kernel usa sempre questa directory come punto @@ -2545,7 +2546,7 @@ accedere a file al di fuori della sezione di albero in cui \textsl{imprigionato}. Solo un processo con i privilegi di amministratore può usare questa funzione, -e la nuova radice, per quanto detto in \secref{sec:proc_fork}, sarà ereditata +e la nuova radice, per quanto detto in sez.~\ref{sec:proc_fork}, sarà ereditata da tutti i suoi processi figli. Si tenga presente però che la funzione non cambia la directory di lavoro, che potrebbe restare fuori dalla \textit{chroot jail}.