da1f600a03304454da3745f70f386afaf9706830
[gapil.git] / filestd.tex
1 \chapter{I files: l'interfaccia standard ANSI C}
2 \label{cha:files_std_interface}
3
4 %
5 % Questa va per ultima. Va bene che e` la più usata, ma è basata sulle altre
6 %
7 \section{I file stream e gli oggetti \texttt{FILE}}
8 \label{sec:filestd_stream}
9
10 Esamineremo in questa sezione l'interfaccia per i file stream, le modalità per
11 crearli, e le funzioni disponibili per leggere, scrivere e compiere le varie
12 operazioni connesse all'uso dei file. L'interfaccia è accessibile includendo
13 l'header file \texttt{stdio.h}.
14
15 Per ragioni storiche la struttura di dati che rappresenta un stream è stata
16 chiamata \texttt{FILE}, questi oggetti sono creati dalle funzioni di libreria
17 e contengono tutte le informazioni necessarie a gestire le operazioni sugli
18 stream, come la posizione corrente, lo stato del buffer e degli indicatori di
19 stato e di fine del file. Per questo motivo gli utenti non devono mai
20 utilizzare direttamente o allocare queste strutture, ma usare sempre puntatori
21 del tipo \texttt{FILE *} (tanto che in certi caso il termine di puntatore a
22 file è diventato sinonimo di stream). 
23
24 \subsection{Gli stream standard}
25 \label{sec:filestd_stdfiles}
26
27 Quando un programma viene lanciato il processo ha sempre tre stream
28 predefiniti aperti, che rappresentano i canali standard di input/output
29 prestabiliti per il processo; anche questi tre stream sono definiti
30 nell'header \texttt{stdio.h} e sono:
31
32 \begin{itemize}
33 \item \texttt{FILE * stdin} Lo \textit{standard input} cioè lo stream da cui
34   il processo riceve ordinariamente i dati in ingresso. Normalmente è associato
35   dalla shell all'input del terminale e prende i caratteri dalla tastiera.
36 \item \texttt{FILE * stdout} Lo \textit{standard input} cioè lo stream su cui
37   il processo invia ordinariamente i dati in uscita. Normalmente è associato
38   dalla shell all'output del terminale e scrive sullo schermo.
39 \item \texttt{FILE * stderr} Lo \textit{standard input} cioè lo stream su cui
40   il processo è supposto inviare i messaggi di errore. Normalmente anch'esso
41   è associato dalla shell all'output del terminale e scrive sullo schermo.
42 \end{itemize}
43
44
45 \subsection{La bufferizzazione}
46 \label{sec:filestd_buffering}
47
48 \section{Funzioni base}
49 \label{sec:filestd_base_func}
50
51 \subsection{Apertura di uno stream}
52 \label{sec:filestd_open}
53
54 \subsection{Lettura e scrittura su uno stream}
55 \label{sec:filestd_io}
56
57 \subsection{Posizionamento su uno stream}
58 \label{sec:filestd_seek}
59
60 \subsection{Input/output binario}
61 \label{sec:filestd_binary_io}
62
63 \subsection{Input/output di linea}
64 \label{sec:filestd_line_io}
65
66 \subsection{Input/output formattato}
67 \label{sec:filestd_formatted_io}
68
69 \subsection{Chiusura di uno stream}
70 \label{sec:filestd_close}
71
72 \section{Funzioni avanzate}
73 \label{sec:filestd_adv_func}
74
75
76 \subsection{Dettagli dell'implementazione}
77 \label{sec:filestd_details}
78
79 \subsection{File temporanei}
80 \label{sec:filestd_temp_file}
81
82 \subsection{Efficienza}
83 \label{sec:filestd_efficiency}
84
85
86
87
88
89
90
91