X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=fileunix.tex;h=95dc1840d035d316f975f0e945a938203ed9b5c5;hb=6e257bf71f9acd5839dbae72de3dc9523cfb47c9;hp=52dc4a16ce535c91c18ef07150dcc849ab0742ed;hpb=dd741fcfa876c0a4c26a72da0035b7cfea8202e2;p=gapil.git diff --git a/fileunix.tex b/fileunix.tex index 52dc4a1..95dc184 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -1,6 +1,6 @@ %% fileunix.tex %% -%% Copyright (C) 2000-2005 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to %% copy, distribute and/or modify this document under the terms of the GNU Free %% Documentation License, Version 1.1 or any later version published by the %% Free Software Foundation; with the Invariant Sections being "Un preambolo", @@ -55,7 +55,8 @@ valore come argomento alle varie funzioni dell'interfaccia. Per capire come funziona il meccanismo occorre spiegare a grandi linee come il kernel gestisce l'interazione fra processi e file. Il kernel mantiene sempre un elenco dei processi attivi nella cosiddetta \itindex{process~table} -\textit{process table} ed un elenco dei file aperti nella \textit{file table}. +\textit{process table} ed un elenco dei file aperti nella +\itindex{file~table} \textit{file table}. La \itindex{process~table} \textit{process table} è una tabella che contiene una voce per ciascun processo attivo nel sistema. In Linux ciascuna voce è @@ -68,15 +69,15 @@ che il processo ha aperto, ed in particolare: \item i flag relativi ai file descriptor. \item il numero di file aperti. \item una tabella che contiene un puntatore alla relativa voce nella - \textit{file table} per ogni file aperto. + \itindex{file~table} \textit{file table} per ogni file aperto. \end{itemize*} il \textit{file descriptor} in sostanza è l'intero positivo che indicizza quest'ultima tabella. -La \textit{file table} è una tabella che contiene una voce per ciascun file -che è stato aperto nel sistema. In Linux è costituita da strutture di tipo -\struct{file}; in ciascuna di esse sono tenute varie informazioni relative al -file, fra cui: +La \itindex{file~table} \textit{file table} è una tabella che contiene una +voce per ciascun file che è stato aperto nel sistema. In Linux è costituita da +strutture di tipo \struct{file}; in ciascuna di esse sono tenute varie +informazioni relative al file, fra cui: \begin{itemize*} \item lo stato del file (nel campo \var{f\_flags}). \item il valore della posizione corrente (l'\textit{offset}) nel file (nel @@ -228,9 +229,9 @@ un file descriptor, il suo prototipo La funzione apre il file usando il primo file descriptor libero, e crea -l'opportuna voce, cioè la struttura \struct{file}, nella \textit{file table} -del processo. Viene sempre restituito come valore di ritorno il file -descriptor con il valore più basso disponibile. +l'opportuna voce, cioè la struttura \struct{file}, nella \itindex{file~table} +\textit{file table} del processo. Viene sempre restituito come valore di +ritorno il file descriptor con il valore più basso disponibile. \footnotetext[2]{la pagina di manuale di \func{open} segnala che questa opzione è difettosa su NFS, e che i programmi che la usano per stabilire un @@ -261,8 +262,9 @@ descriptor con il valore pi \hline \const{O\_CREAT} & Se il file non esiste verrà creato, con le regole di titolarità del file viste in - sez.~\ref{sec:file_ownership}. Con questa opzione - l'argomento \param{mode} deve essere specificato. \\ + sez.~\ref{sec:file_ownership_management}. Con questa + opzione l'argomento \param{mode} deve essere + specificato. \\ \const{O\_EXCL} & Usato in congiunzione con \const{O\_CREAT} fa sì che la precedente esistenza del file diventi un errore\protect\footnotemark\ che fa fallire @@ -392,7 +394,7 @@ L'argomento \param{mode} indica i permessi con cui il file viene creato; i valori possibili sono gli stessi già visti in sez.~\ref{sec:file_perm_overview} e possono essere specificati come OR binario delle costanti descritte in tab.~\ref{tab:file_bit_perm}. Questi permessi sono filtrati dal valore di -\var{umask} (vedi sez.~\ref{sec:file_umask}) per il processo. +\var{umask} (vedi sez.~\ref{sec:file_perm_management}) per il processo. La funzione prevede diverse opzioni, che vengono specificate usando vari bit dell'argomento \param{flags}. Alcuni di questi bit vanno anche a costituire @@ -462,8 +464,9 @@ La chiusura di un file rilascia ogni blocco (il \textit{file locking} \index{file!locking} è trattato in sez.~\ref{sec:file_locking}) che il processo poteva avere acquisito su di esso; se \param{fd} è l'ultimo riferimento (di eventuali copie) ad un file aperto, tutte le risorse nella -file table vengono rilasciate. Infine se il file descriptor era l'ultimo -riferimento ad un file su disco quest'ultimo viene cancellato. +\itindex{file~table} \textit{file table} vengono rilasciate. Infine se il file +descriptor era l'ultimo riferimento ad un file su disco quest'ultimo viene +cancellato. Si ricordi che quando un processo termina anche tutti i suoi file descriptor vengono chiusi, molti programmi sfruttano questa caratteristica e non usano @@ -510,8 +513,7 @@ file. successo e $-1$ in caso di errore nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} - \item[\errcode{ESPIPE}] \param{fd} è una pipe, un socket\index{socket} o una - fifo. + \item[\errcode{ESPIPE}] \param{fd} è una pipe, un socket o una fifo. \item[\errcode{EINVAL}] \param{whence} non è un valore valido. \end{errlist} ed inoltre \errval{EBADF}.} @@ -614,11 +616,11 @@ sez.~\ref{sec:file_noblocking}) e ritorna solo quando ne arrivano; se il numero di byte richiesti eccede quelli disponibili la funzione ritorna comunque, ma con un numero di byte inferiore a quelli richiesti. -Lo stesso comportamento avviene caso di lettura dalla rete (cioè su un -socket\index{socket}, come vedremo in sez.~\ref{sec:sock_io_behav}), o per la -lettura da certi file di dispositivo, come le unità a nastro, che -restituiscono sempre i dati ad un singolo blocco alla volta, o come le linee -seriali, che restituiscono solo i dati ricevuti fino al momento della lettura. +Lo stesso comportamento avviene caso di lettura dalla rete (cioè su un socket, +come vedremo in sez.~\ref{sec:sock_io_behav}), o per la lettura da certi file +di dispositivo, come le unità a nastro, che restituiscono sempre i dati ad un +singolo blocco alla volta, o come le linee seriali, che restituiscono solo i +dati ricevuti fino al momento della lettura. Infine anche le due condizioni segnalate dagli errori \errcode{EINTR} ed \errcode{EAGAIN} non sono propriamente degli errori. La prima si verifica @@ -843,8 +845,8 @@ Se dal punto di vista della lettura dei dati questo non comporta nessun problema, quando si andrà a scrivere le operazioni potranno mescolarsi in maniera imprevedibile. Il sistema però fornisce in alcuni casi la possibilità di eseguire alcune operazioni di scrittura in maniera coordinata anche senza -utilizzare meccanismi di sincronizzazione più complessi (come il \textit{file - locking} \index{file!locking}, che esamineremo in +utilizzare meccanismi di sincronizzazione più complessi (come il +\index{file!locking} \textit{file locking}, che esamineremo in sez.~\ref{sec:file_locking}). Un caso tipico di necessità di accesso condiviso in scrittura è quello in cui @@ -1057,7 +1059,7 @@ descriptor, che non riguardano la normale lettura e scrittura di dati, ma la gestione sia delle loro proprietà, che di tutta una serie di ulteriori funzionalità che il kernel può mettere a disposizione.\footnote{ad esempio si gestiscono con questa funzione varie modalità di I/O asincrono (vedi - sez.~\ref{sec:file_asyncronous_operation}) e il file locking + sez.~\ref{sec:file_asyncronous_operation}) e il \textit{file locking} \index{file!locking} (vedi sez.~\ref{sec:file_locking}).} Per queste operazioni di manipolazione e di controllo delle varie proprietà e