\chapter{I files: l'interfaccia I/O di unix}
\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. 



\section{L'architettura di base}
\label{sec:file_base_arch}

Iniziamo la trattazione con una panoramica sull'architettura base della
intefaccuia dei file descriptor. Esamineremo in questa sezione 


\subsection{I 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.

\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}; 


\subsection{La funzione \texttt{open}}
\label{sec:file_open}

\subsection{La funzione \texttt{creat}}
\label{sec:file_creat}

\subsection{La funzione \texttt{close}}
\label{sec:file_close}

\subsection{La funzione \texttt{lseek}}
\label{sec:file_lseek}

\subsection{La funzione \texttt{read}}
\label{sec:file_read}

\subsection{La funzione \texttt{write}}
\label{sec:file_write}

\section{La condivisione dei files}
\label{sec:file_sharing}


\subsection{Operazioni atomiche}
\label{sec:file_atomic}

\section{Funzioni avanzate}
\label{sec:file_adv_func}

\subsection{La funzioni \texttt{dup} e \texttt{dup2}}
\label{sec:file_dup}

\subsection{La funzione \texttt{fcntl}}
\label{sec:file_fcntl}

\subsection{La funzione \texttt{ioctl}}
\label{sec:file_ioctl}




