X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=filedir.tex;h=9f3689d38d705135eca538ede7adb64d14fb24db;hb=f5b6b11082ecf8fa6d10c74464a9f88e55b730c0;hp=88f29647eb7f57ad5bd969cdba9bc94a89dc5924;hpb=4ad4523de32d786ae4c24ef157bd4b8fe4aac534;p=gapil.git diff --git a/filedir.tex b/filedir.tex index 88f2964..9f3689d 100644 --- a/filedir.tex +++ b/filedir.tex @@ -95,8 +95,8 @@ campo \var{st\_mode} sono riportate in \ntab. 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 @@ -144,7 +144,11 @@ permesso (di lettura, scrittura o esecuzione) si basa sul confronto fra 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 @@ -603,13 +607,13 @@ generali relative alle caratteristiche di ciascun file, a partire dalle 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 @@ -639,7 +643,7 @@ funzioni sono i seguenti: \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 @@ -675,7 +679,7 @@ struct stat { 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} @@ -683,14 +687,14 @@ del sistema (di quelli definiti in \tabref{tab:xxx_sys_types}, e dichiarati in 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 @@ -978,7 +982,7 @@ creazione del file, usato da molti altri sistemi operativi, che in unix non 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 @@ -994,8 +998,8 @@ questa 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} @@ -1026,14 +1030,14 @@ molto pi \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 @@ -1051,27 +1055,27 @@ stesso file pu 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} @@ -1086,20 +1090,20 @@ diverse directory. 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 @@ -1112,10 +1116,10 @@ effettua con la funzione \texttt{unlink}; il suo prototipo 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. @@ -1146,7 +1150,7 @@ usata per essere sicuri di non lasciare file temporanei su disco in caso di 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