X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileunix.tex;h=772e13ec2746de1f0e063219f8c7bf427f858611;hp=4964298bb9861361a2af22366a0e2f86c242d742;hb=33a26fb169d5a3e459b816cb79eb7956e8434ffb;hpb=71d0335e9f0afcab9cd127983eb6737098fe9fd6 diff --git a/fileunix.tex b/fileunix.tex index 4964298..772e13e 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -1,12 +1,11 @@ -\chapter{I files: l'interfaccia I/O di unix} +\chapter{L'interfaccia unix di I/O con i file} \label{cha:file_unix_interface} Esamineremo in questo capitolo la prima delle due interfacce di programmazione -per i file, quella dei file descriptor, nativa di unix. Questa è -l'interfaccia di basso livello, che non prevede funzioni evolute come la -bufferizzazione o funzioni di lettura o scrittura formattata, su cui è -costruita anche l'interfaccia standard dei file definta dallo standard ANSI -C. +per i file, quella dei file descriptor, nativa di unix. Questa è l'interfaccia +di basso livello, che non prevede funzioni evolute come la bufferizzazione o +funzioni di lettura o scrittura formattata, ma è su questa che è costruita +anche l'interfaccia standard dei file definita dallo standard ANSI C. @@ -14,23 +13,50 @@ C. \label{sec:file_base_arch} Iniziamo la trattazione con una panoramica sull'architettura base della -intefaccuia dei file descriptor. Esamineremo in questa sezione +intefaccia dei file descriptor. Esamineremo in questa sezione la struttura +base dell'interfaccia con i file di unix, e le modalità con cui i processi +ed il kernel interagiscono per operare sui file. -\subsection{I file descriptors} +\subsection{L'architettura dei \textit{file descriptors}} \label{sec:file_fd} -Per poter accedere al contenuto dei file occorre anzitutto aprirlo. Questo -crea un canale di comunicazione che permette di eseguire una serie di -operazioni. Una volta terminate le operazioni, il file dovrà essere chiuso, e -questo chiuderà il canale di comunicazione impedendo ogni ulteriore -operazione. +Per poter accedere al contenuto di un file occorre creare un canale di +comunicazione con il kernel che renda possibile operare su di esso (si ricordi +quanto visto in \secref{sec:file_vfs_work}), questo si fa aprendo il file con +la funzione \func{open} che provvederà a localizzare l'inode del file e +inizializzare le funzioni che il VFS mette a disposizione (riportate in +\tabref{tab:file_file_operations}). Una volta terminate le operazioni, il file +dovrà essere chiuso, e questo chiuderà il canale di comunicazione impedendo +ogni ulteriore operazione. + +Per ciascun file aperto nel sistema il kernel mantiene voce nella tabella dei +file; ciascuna voce di questa tabella contiene: +\begin{itemize} +\item lo stato del file (lettura, scrittura, append, etc.). +\item il valore della posizione corrente (l'\textit{offset}). +\item un puntatore al +\end{itemize} + + +All'interno di ogni processo i file aperti sono identificati da un intero non +negativo, chiamato appunto \textit{file descriptors}; ciascun processo ha una +tabella dei file aperti, in cui + + + + +\subsection{La condivisione dei files} +\label{sec:file_sharing} + + \section{Le funzioni base} \label{sec:file_base_func} -L'interfaccia standard unix per l'input/output sui file è su cinque funzioni -\texttt{open}, \texttt{read}, \texttt{write}, \texttt{lseek}, \texttt{close}; +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}; \subsection{La funzione \texttt{open}} @@ -51,11 +77,7 @@ L'interfaccia standard unix per l'input/output sui file \subsection{La funzione \texttt{write}} \label{sec:file_write} -\section{La condivisione dei files} -\label{sec:file_sharing} - - -\subsection{Operazioni atomiche} +\subsection{Operazioni atomiche coi file} \label{sec:file_atomic} \section{Funzioni avanzate}