X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileunix.tex;h=b9d72195ec213c26ea4f5ca78bc3e4151e1b4f0d;hp=5c1ab7cbed77a73703c256e3833f7bf79fa83bb4;hb=d58b732f24797c3c17ab1cc8d8aa85ec04df62ed;hpb=28d478465caab3b1ed140fd1a45c8a305f952be1 diff --git a/fileunix.tex b/fileunix.tex index 5c1ab7c..b9d7219 100644 --- a/fileunix.tex +++ b/fileunix.tex @@ -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}.