From c32a11a121ae117619653e8c6421932114f46080 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Sun, 4 Nov 2001 13:58:49 +0000 Subject: [PATCH] Si prosegue con i file. --- fileunix.tex | 159 +++++++++++++++++++++++++++++++++++------------ gapil.tex | 2 +- img/procfile.dia | Bin 2876 -> 4545 bytes system.tex | 4 ++ 4 files changed, 125 insertions(+), 40 deletions(-) diff --git a/fileunix.tex b/fileunix.tex index b747a4d..bc50b42 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -13,9 +13,11 @@ ANSI C. \section{L'architettura di base} \label{sec:file_base_arch} -Esamineremo in questa sezione la architettura su cui è basata dell'interfaccia -con cui i processi accedono ai file, che, pure nelle differenze di -implementazione, è comune ad ogni implementazione di unix. +In questa sezione faremo una breve introduzione sulla architettura su cui è +basata dell'interfaccia dei \textit{file descriptor}, che, sia pure con +differenze di implementazione, è comune ad ogni implementazione di unix. +Vedremo cosa comporti questa architettura in caso di accesso contemporaneo ai +file da parte di più processi. \subsection{L'architettura dei \textit{file descriptors}} @@ -47,12 +49,12 @@ relative ad un singolo processo; fra queste informazioni c' puntatore ad una ulteriore struttura di tipo \var{files\_struct} in cui sono contenute le informazioni relative ai file che il processo ha aperto, ed in particolare: -\begin{itemize} +\begin{itemize*} \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. -\end{itemize} +\end{itemize*} il \textit{file descriptor} in sostanza è l'intero positivo che indicizza questa tabella. @@ -60,43 +62,46 @@ La \textit{file table} che è stato aperto nel sistema. In Linux è costituita da strutture di tipo \var{file}; in ciascuna di esse sono tenute varie informazioni relative al file, fra cui: -\begin{itemize} +\begin{itemize*} \item lo stato del file (lettura, scrittura, append, etc.). \item il valore della posizione corrente (l'\textit{offset}) nel file. \item un puntatore all'inode\footnote{nel kernel 2.4.x si è in realtà passati ad un puntatore ad una struttura \var{dentry} che punta a sua volta all'inode passando per la nuova struttura del VFS} del file. -\item un puntatore alla tabella delle funzioni \footnote{la struttura - \var{f\_op} descritta in \secref{sec:file_vfs_work}} che si possono usare - sul file. -\end{itemize} -In \nfig\ si è riportato lo schema di questa architettura, con le -interrelazioni fra tutti questi elementi. - +%\item un puntatore alla tabella delle funzioni \footnote{la struttura +% \var{f\_op} descritta in \secref{sec:file_vfs_work}} che si possono usare +% sul file. +\end{itemize*} + +In \figref{fig:file_proc_file} si è riportato uno schema in cui è illustrata +questa architettura, in cui si sono evidenziate le interrelazioni fra le varie +strutture di dati sulla quale essa è basata. \begin{figure}[htb] \centering \includegraphics[width=14cm]{img/procfile.eps} - \caption{Schema delle operazioni del VFS} - \label{fig:file_VFS_scheme} + \caption{Schema della architettura dell'accesso ai file attraverso + l'interfaccia dei \textit{file descroptor}} + \label{fig:file_proc_file} \end{figure} +Ritorneremo su questo schema più volte, dato che esso è fondamentale per +capire i dettagli del funzionamento delle dell'interfaccia dei \textit{file + descriptor}. \subsection{I file standard} \label{sec:file_std_descr} Come accennato i \textit{file descriptor} non sono altro che un indice nella -tabella dei file aperti di ciascun processo; per questo motivo normalmente -essi vengono assegnati in successione tutte le volte che apre un nuovo file -(senza averne chiuso nessuno in precedenza). - +tabella dei file aperti di ciascun processo; per questo motivo essi vengono +assegnati in successione tutte le volte che si apre un nuovo file (se non se +ne è chiuso nessuno in precedenza). In tutti i sistemi unix-like esiste una convenzione generale per cui ogni processo viene lanciato con almeno tre file aperti. Questi, per quanto dicevamo prima, avranno come \textit{file descriptor} i valori 0, 1 e 2. Benché questa sia soltanto una convenzione, essa è seguita dalla gran parte -delle applicazioni, e non seguirla potrebbe portare a gravi problemi di -incompatibilità. - +delle applicazioni, e non aderirvi potrebbe portare a gravi problemi di +interoperabilità. Il primo file è sempre associato a quello che viene chiamato \textit{standard input}, è cioè il file da cui il processo si aspetta di ricevere i dati in @@ -108,19 +113,37 @@ shell, Lo standard POSIX.1 provvede tre costanti simboliche, definite nell'header \file{unistd.h}, al posto di questi valori numerici: -\begin{itemize} -\item \macro{STDIN\_FILENO} \textit{file descriptor} dello \textit{standard - input} -\item \macro{STDOUT\_FILENO} \textit{file descriptor} dello \textit{standard - output} -\item \macro{STDERR\_FILENO} \textit{file descriptor} dello \textit{standard - error} -\end{itemize} - - - -\subsection{La condivisione dei files} -\label{sec:file_sharing} +\begin{table}[htb] + \centering + \begin{tabular}[c]{|l|l|} + \hline + \textbf{Costante} & \textbf{Significato} \\ + \hline + \hline + \macro{STDIN\_FILENO} & \textit{file descriptor} dello \textit{standard + input} \\ + \macro{STDOUT\_FILENO} & \textit{file descriptor} dello \textit{standard + output} \\ + \macro{STDERR\_FILENO} & \textit{file descriptor} dello \textit{standard + error}\\ + \hline + \end{tabular} + \caption{Costanti definite in \file{unistd.h} per i file standard aperti + alla creazione di ogni processo.} + \label{tab:file_std_files} +\end{table} + +In \curfig\ si è utilizzata questa situazione come esempio, facendo +riferimento ad un programma in cui lo \textit{standard input} è associato ad +un file mentre lo \textit{standard output} e lo \textit{standard error} sono +entrambi associati ad un altro file (e quindi utilizzano lo stesso inode). + +Nelle vecchie versioni di unix (ed anche in Linux fino al kernel 2.0.x) il +numero di file aperti era anche soggetto ad un limite massimo dato dalle +dimensioni del vettore di puntatori con cui era realizzata la tabella dei file +descriptor dentro \var{file\_struct}; questo limite intrinseco non sussiste +più, dato che si è passati ad una linked list, restano i limiti imposti +dall'amministratore (vedi \secref{sec:sys_limits}). @@ -128,13 +151,66 @@ Lo standard POSIX.1 provvede tre costanti simboliche, definite nell'header \label{sec:file_base_func} L'interfaccia standard unix per l'input/output sui file è basata su cinque -funzioni fondamentali \func{open}, \func{read}, \func{write}, -\func{lseek} e \func{close}; +funzioni fondamentali \func{open}, \func{read}, \func{write}, \func{lseek} e +\func{close}, usate rispettivamente per aprire, leggere, scrivere, spostarsi e +chiudere un file. + +La gran parte delle operazioni sui file si effettua attraverso queste cinque +funzioni, esse vengono chiamate anche funzioni di I/O non bufferizzato, per +contrapporle alle analoghe previste dallo standard ANSI C (che vedremo in +\secref{sec:file_ansi_base_func}), dato che effettuano le operazioni di lettura +e scrittura usando direttamente le system call del kernel. \subsection{La funzione \func{open}} \label{sec:file_open} +La funzione \func{open} è la funzione fondamentale per accedere ai file, ed è +quella che crea l'associazione fra un pathname ed un file descriptor; il suo +prototipo è: + +\begin{functions} + \headdecl{sys/types.h} + \headdecl{sys/stat.h} + \headdecl{fcntl.h} + \funcdecl{int open(const char *pathname, int flags)} + \funcdecl{int open(const char *pathname, int flags, mode\_t mode)} + Apre il file indicato da \var{pathname} nella modalità indicata da + \var{flags}, e, nel caso il file sia creato, con gli eventuali permessi + specificati da \var{mode}. + + La funzione ritorna il file descriptor in caso di successo e -1 in caso di + errore. In questo caso la variabile \var{errno} viene settata ad uno dei + valori: + + \begin{errlist} + \item \macro{EEXIST} \var{pathname} esiste e si è specificato + \macro{O\_CREAT} e \macro{O\_EXCL}. + \item \macro{EISDIR} \var{pathname} indica una directory e si è tentato + l'accesso in scrittura. + \item \macro{ENOTDIR} un componente di \var{pathname} non è una directory o + si è specificato \macro{O\_DIRECTORY} e \var{pathname} non è una + directory. + \item \macro{ENXIO} si sono settati \macro{O\_NOBLOCK} o \macro{O\_WRONLY} + ed il file è una fifo che non viene letta da nessun processo o + \var{pathname} è un file di dispositivo ma il dispositivo è assente. + \item \macro{ENODEV} \var{pathname} si riferisce a un file di dispositivo + che non esiste. + \item \macro{ETXTBSY} si è cercato di accedere in scrittura all'immagine di + un programma in esecuzione. + \item \macro{ELOOP} si sono incotrati troppi link simbolici nel risolvere + pathname o si è indicato \macro{O\_NOFOLLOW} e \var{pathname} è un link + simbolico. + \end{errlist} + ed inoltre \macro{EACCES}, \macro{ENAMETOOLONG}, \macro{ENOENT}, + \macro{EROFS}, \macro{EFAULT}, \macro{ENOSPC}, \macro{ENOMEM}, + \macro{EMFILE} e \macro{ENFILE}. +\end{functions} + + + + + \subsection{La funzione \func{creat}} \label{sec:file_creat} @@ -150,12 +226,17 @@ funzioni fondamentali \func{open}, \func{read}, \func{write}, \subsection{La funzione \func{write}} \label{sec:file_write} -\subsection{Operazioni atomiche coi file} -\label{sec:file_atomic} \section{Funzioni avanzate} \label{sec:file_adv_func} +\subsection{La condivisione dei files} +\label{sec:file_sharing} + +\subsection{Operazioni atomiche coi file} +\label{sec:file_atomic} + + \subsection{La funzioni \func{dup} e \func{dup2}} \label{sec:file_dup} diff --git a/gapil.tex b/gapil.tex index 1364419..6a44c54 100644 --- a/gapil.tex +++ b/gapil.tex @@ -1,4 +1,4 @@ -%% +%% %% GaPiL : Guida alla Programmazione in Linux %% %% S. Piccardi Oct. 2000 diff --git a/img/procfile.dia b/img/procfile.dia index cd8131c4763cf2910658f05075b4acd34d64777e..d20b2a35ad8e86dbdd93dc75ff85943c7174628f 100644 GIT binary patch literal 4545 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 literal 2876 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 anpXFpnm6*_tV-thpZ*VL!QS?)=>Py7y_s?V diff --git a/system.tex b/system.tex index 56ae1d1..7a44a35 100644 --- a/system.tex +++ b/system.tex @@ -208,3 +208,7 @@ o la macro (\texttt{\small 15--17}) associate a quel codice. \label{fig:intro_err_mess} \end{figure} + +\subsection{Valori e limiti del sistema} +\label{sec:sys_limits} + -- 2.30.2