Iniziato l'I/O sui file
[gapil.git] / fileunix.tex
1 \chapter{L'interfaccia unix di I/O con i file}
2 \label{cha:file_unix_interface}
3
4 Esamineremo in questo capitolo la prima delle due interfacce di programmazione
5 per i file, quella dei file descriptor, nativa di unix. Questa è l'interfaccia
6 di basso livello, che non prevede funzioni evolute come la bufferizzazione o
7 funzioni di lettura o scrittura formattata, ma è su questa che è costruita
8 anche l'interfaccia standard dei file definita dallo standard ANSI C.
9
10
11
12 \section{L'architettura di base}
13 \label{sec:file_base_arch}
14
15 Iniziamo la trattazione con una panoramica sull'architettura base della
16 intefaccia dei file descriptor. Esamineremo in questa sezione la struttura
17 base dell'interfaccia con i file di unix, e le modalità con cui i processi
18 ed il kernel interagiscono per operare sui file. 
19
20
21 \subsection{L'architettura dei \textit{file descriptors}}
22 \label{sec:file_fd}
23
24 Per poter accedere al contenuto di un file occorre creare un canale di
25 comunicazione con il kernel che renda possibile operare su di esso (si ricordi
26 quanto visto in \secref{sec:file_vfs_work}), questo si fa aprendo il file con
27 la funzione \func{open} che provvederà a localizzare l'inode del file e
28 inizializzare le funzioni che il VFS mette a disposizione (riportate in
29 \tabref{tab:file_file_operations}). Una volta terminate le operazioni, il file
30 dovrà essere chiuso, e questo chiuderà il canale di comunicazione impedendo
31 ogni ulteriore operazione.
32
33 Per ciascun file aperto nel sistema il kernel mantiene voce nella tabella dei
34 file; ciascuna voce di questa tabella contiene:
35 \begin{itemize}
36 \item lo stato del file (lettura, scrittura, append, etc.).
37 \item il valore della posizione corrente (l'\textit{offset}).
38 \item un puntatore al 
39 \end{itemize}
40
41
42 All'interno di ogni processo i file aperti sono identificati da un intero non
43 negativo, chiamato appunto \textit{file descriptors}; ciascun processo ha una
44 tabella dei file aperti, in cui 
45
46
47
48
49 \subsection{La condivisione dei files}
50 \label{sec:file_sharing}
51
52
53
54 \section{Le funzioni base}
55 \label{sec:file_base_func}
56
57 L'interfaccia standard unix per l'input/output sui file è basata su cinque
58 funzioni fondamentali \func{open}, \func{read}, \func{write},
59 \func{lseek} e \func{close};
60
61
62 \subsection{La funzione \texttt{open}}
63 \label{sec:file_open}
64
65 \subsection{La funzione \texttt{creat}}
66 \label{sec:file_creat}
67
68 \subsection{La funzione \texttt{close}}
69 \label{sec:file_close}
70
71 \subsection{La funzione \texttt{lseek}}
72 \label{sec:file_lseek}
73
74 \subsection{La funzione \texttt{read}}
75 \label{sec:file_read}
76
77 \subsection{La funzione \texttt{write}}
78 \label{sec:file_write}
79
80 \subsection{Operazioni atomiche coi file}
81 \label{sec:file_atomic}
82
83 \section{Funzioni avanzate}
84 \label{sec:file_adv_func}
85
86 \subsection{La funzioni \texttt{dup} e \texttt{dup2}}
87 \label{sec:file_dup}
88
89 \subsection{La funzione \texttt{fcntl}}
90 \label{sec:file_fcntl}
91
92 \subsection{La funzione \texttt{ioctl}}
93 \label{sec:file_ioctl}
94
95
96
97