+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} 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}
+
+La funzione apre il file, usando il primo file descriptor libero, e crea
+l'opportuna voce (cioè la struttura \var{file}) nella file table. Viene usato
+sempre il file descriptor con il valore più basso, questa caratteritica
+permette di prevedere qual'è il valore che si otterrà e viene talvolta usata
+da alcune applicazioni per sostituire i file corrispondenti ai file standard
+di \secref{sec:file_std_descr}: se ad esempio si chiude lo standard input e si
+apre subito dopo un nuovo file questo diventerà il nuovo standard input (avrà
+cioè il file descriptor 0).
+
+Il nuovo file descriptor non è condiviso con nessun altro processo, (torneremo
+sulla condivisione dei file, in genere accessibile dopo una \func{fork}, in
+\secref{sec:file_sharing}). Il nuovo file descriptor è settato di default per
+restare aperto attraverso una \func{exec} (come accennato in
+\secref{sec:proc_exec}) ed l'offset è settato all'inizio del file.
+
+La funzione prevede diverse modalità di apertura di un file, che vengono
+specificate dal parametro \var{flags}, questo parametro viene settato come
+maschera binaria attraverso OR aritmetico delle costanti che identificano i
+vari flag. Questi ultimi sono poi divisibili in tre categorie principali:
+\begin{itemize}
+\item \textsl{le modalità di accesso}, che specificano con quale modalità si
+ accede al file: lettura, scrittura o lettura/scrittura. Uno di questi
+ valori deve essere sempre specificato, vengono settati alla chiamata da
+ \func{open}, e possono essere riletti con una \func{fcntl}, ma non
+ modificati.
+\item \textsl{le modalità di apertura}, che permettono di specificare alcuni
+ dei modi di funzionamento di \func{open}. Hanno effetto solo al momento
+ della chiamata e non sono memorizzati nè possono essere riletti.
+\item \textsl{le modalità di operazione}, che permettono di specificare alcuni
+ effetti del comportamento delle operazioni sul file (come la \func{read} o
+ la \func{write}). Sono settati alla chiamata da \func{open}, ma possono
+ essere riletti e modificati con una una \func{fcntl}.
+\end{itemize}
+
+In \ntab\ si sono riportate, come definite in \file{fcntl.h}, le costanti che
+identificano i vari flag di stato (ed i relativi valori numerici), da usare
+per specificare il valore di \var{flags}, alcuni di questi poi andranno a
+costituire lo stato del file (il cosiddetto \textit{file status flag}), tenuto
+nel campo \var{f\_flags} di \var{file}.
+
+\begin{table}[htb]
+ \centering
+ \begin{tabular}[c]{|l|p{10cm}|}
+ \hline
+ \textbf{Flag} & \textbf{Descrizione} \\
+ \hline
+ \hline % modailtà di accesso
+ \macro{O\_RDONLY} & apre il file in sola lettura\\
+ \macro{O\_WRONLY} & apre il file in sola scrittura\\
+ \macro{O\_RDWR} & apre il file lettura/scrittura\\
+ \hline % modalita di apertura
+ \macro{O\_CREAT} & Se il file non esiste verrà creato, con le regole di
+ titolarità del file viste in \secref{sec:file_ownership}. \\
+ \macro{O\_EXCL} & usato in congiunzione con \macro{O\_CREAT} fa sì che
+ l'esistenza del file diventi un errore\footnote{la man page di \func{open}
+ segnala che questa opzione è difettosa su NFS, e che i programmi che la
+ usano per stabilire un file di lock possono incorrere in una race
+ condition. Si consiglia come alternativa di usare un file con un nome
+ univoco e la funzione \func{link} per verificarne l'esistenza.} che fa
+ fallire \func{open} con \macro{EEXIST}.\\
+ \macro{O\_NOCTTY} & Se \var{pathname} si riferisce ad un device di
+ terminale, questo non diventerà il terminale di controllo, anche se il
+ processo non ne ha ancora uno (si veda \secref{sec:sess_xxx}).\\
+ \macro{O\_SHLOCK} & \\
+ \macro{O\_EXLOCK} & \\
+ \macro{O\_TRUNC} & \\
+ \macro{O\_NOFOLLOW} & \\
+ \macro{O\_DIRECTORY} & \\
+ \macro{O\_LARGEFILE} & \\
+ \hline % modalità di operazione
+ \macro{O\_APPEND} & \\
+ \macro{O\_NONBLOCK} & Apre il file in modalità non bloccante, questo
+ comporta che \func{open} ritorna immediatamente anche nei casi in cui si
+ sarebbe bloccata. inoltre tutte le operazioni di I/O successive restano
+ in modalità non bloccante, il che significa il fallimento di una
+ \func{read} in assenza di dati da leggere e quello di una \func{write} in
+ caso di impossibilità di scrivere immediatamente. \\
+ \macro{O\_NDELAY} & sinonimo di \macro{O\_NONBLOCK}\\
+ \macro{O\_ASYNC} & \\
+ \macro{O\_FSYNC} & \\
+ \macro{O\_SYNC} & \\
+ \macro{O\_NOATIME} & \\
+ \hline
+ \end{tabular}
+ \caption{Costanti che identificano i vari flag di stato del file specificati
+ alla sua aprertura tramite il parametro \var{flags} di \func{open}.}
+ \label{tab:file_open_flags}
+\end{table}
+
+
+\subsection{La funzione \func{creat}}