Rilettura e inizio degli stream
[gapil.git] / fileunix.tex
index f53b821865556037e669af20d5eb5bfefeeabdea..b9d72195ec213c26ea4f5ca78bc3e4151e1b4f0d 100644 (file)
@@ -1,12 +1,12 @@
-\chapter{L'interfaccia unix di I/O con i file}
+\chapter{I file: l'interfaccia standard unix}
 \label{cha:file_unix_interface}
 
 Esamineremo in questo capitolo la prima delle due interfacce di programmazione
 per i file, quella dei \textit{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.
+l'interfaccia di basso livello provvista direttamente dalle system call, che
+non prevede funzionalità evolute come la bufferizzazione o funzioni di lettura
+o scrittura formattata, e sulla quale è costruita anche l'interfaccia definita
+dallo standard ANSI C che affronteremo in \capref{cha:files_std_interface}.
 
 
 
@@ -205,12 +205,7 @@ prototipo 
 
 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 caratteristica
-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).
+sempre il file descriptor con il valore più basso. 
 
 \begin{table}[!htb]
   \centering
@@ -308,6 +303,13 @@ cio
   una ambiguità, dato che come vedremo in \secref{sec:file_read} il ritorno di
   zero da parte di \func{read} ha il significato di una end-of-file.}
 
+Questa caratteristica permette di prevedere qual'è il valore del file
+descriptor che si otterrà al ritorno di \func{open}, 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
@@ -481,8 +483,9 @@ causano un errore ma restituiscono un valore indefinito.
 \subsection{La funzione \func{read}}
 \label{sec:file_read}
 
-Per leggere da un file precedentemente aperto, si può la funzione \func{read},
-il cui prototipo è:
+
+Una volta che un file è stato aperto su possono leggere i dati che contiene
+utilizzando la funzione \func{read}, il cui prototipo è:
 \begin{prototype}{unistd.h}{ssize\_t read(int fd, void * buf, size\_t count)}
   
   La funzione cerca di leggere \var{count} byte dal file \var{fd} al buffer
@@ -567,17 +570,18 @@ per \func{read} e \func{lseek}.
 \end{prototype}
 
 Questa funzione serve quando si vogliono leggere dati dal file senza
-modificarne la posizione corrente. È equivalente alla esecuzione di una
-\func{read} e una \func{lseek}, ma dato che la posizione sul file può essere
-condivisa fra vari processi (vedi \secref{sec:file_sharing}), essa permette di
-eseguire l'operazione atomicamente. Il valore di \var{offset} fa riferimento
-all'inizio del file.
+modificarne la posizione corrente. È sostanzialmente equivalente alla
+esecuzione di una \func{read} e una \func{lseek}, ma dato che la posizione sul
+file può essere condivisa fra vari processi (vedi \secref{sec:file_sharing}),
+essa permette di eseguire l'operazione atomicamente. Il valore di \var{offset}
+fa sempre riferimento all'inizio del file.
 
 
 \subsection{La funzione \func{write}}
 \label{sec:file_write}
 
-Per scrivere su un file si usa la funzione \func{write}, il cui prototipo è:
+Una volta che un file è stato aperto su può scrivere su di esso utilizzando la
+funzione \func{write}, il cui prototipo è:
 \begin{prototype}{unistd.h}{ssize\_t write(int fd, void * buf, size\_t count)}
   
   La funzione scrive \var{count} byte dal buffer \var{buf} sul file \var{fd}.
@@ -893,7 +897,7 @@ valori 
 \item[\macro{F\_GETFL}] ritorna il valore del \textit{file status flag},
   permette cioè di rileggere quei bit settati da \func{open} all'apertura del
   file che vengono memorizzati (quelli riportati nella prima e terza sezione
-  di \tabref{tab:file_open_flags}).
+  di \tabref{tab:file_open_flags}). 
 \item[\macro{F\_SETFL}] setta il \textit{file status flag} al valore
   specificato da \param{arg}, possono essere settati solo i bit riportati
   nella terza sezione di \tabref{tab:file_open_flags} (da verificare).
@@ -917,7 +921,7 @@ valori 
   \macro{SIGURG} per gli eventi associati al file descriptor \var{fd}. Il
   process group è restituito come valore negativo.
 \item[\macro{F\_SETOWN}] setta il processo o process group che riceverà i
-  sengali \macro{SIGIO} e \macro{SIGURG} per gli eventi associati al file
+  segnali \macro{SIGIO} e \macro{SIGURG} per gli eventi associati al file
   descriptor \var{fd}.  I process group sono settati usando valori negativi.
 \item[\macro{F\_GETSIG}] restituisce il segnale mandato quando ci sono dati
   disponibili in input sul file descriptor. Il valore 0 indica il default (che
@@ -936,6 +940,7 @@ La maggior parte delle funzionalit
 poter essere affrontate in dettaglio a questo punto; saranno riprese più
 avanti quando affronteremo le problematiche ad esse relative.
 
+Per determinare le modalità di accesso inoltre può essere necessario usare la 
 
 \subsection{La funzione \func{ioctl}}
 \label{sec:file_ioctl}
@@ -960,7 +965,7 @@ per ogni singolo dispositivo.  Il prototipo di questa funzione 
   l'informazione necessaria al dispositivo.
   
   La funzione nella maggior parte dei casi ritorna 0, alcune operazioni usano
-  però il valore di ritorno per restituire informazoni. In caso di errore
+  però il valore di ritorno per restituire informazioni. In caso di errore
   viene sempre restituito -1 e \var{errno} viene settata ad uno dei valori
   seguenti:
   \begin{errlist}