X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=filestd.tex;h=9d1c6892b9318da5c6782728bf4a4a039b6481cb;hp=87eb446b9e36f5c2aac598ed893511ff977e1f48;hb=922de35645e21550b70e2e5fe5ced103a0d2e0b4;hpb=9a577c89dd563aacbc619e09bf8b6d99b533274a diff --git a/filestd.tex b/filestd.tex index 87eb446..9d1c689 100644 --- a/filestd.tex +++ b/filestd.tex @@ -13,10 +13,11 @@ \label{cha:files_std_interface} Esamineremo in questo capitolo l'interfaccia standard ANSI C per i file, -quella che viene comunemente detta interfaccia degli \textit{stream}. Dopo -una breve sezione introduttiva tratteremo le funzioni base per la gestione -dell'input/output, mentre tratteremo le caratteristiche più avanzate -dell'interfaccia nell'ultima sezione. +quella che viene comunemente detta interfaccia dei \textit{file stream} o +anche più brevemente degli \textit{stream}. Dopo una breve sezione +introduttiva tratteremo le funzioni base per la gestione dell'input/output, +mentre tratteremo le caratteristiche più avanzate dell'interfaccia nell'ultima +sezione. \section{Introduzione} @@ -24,7 +25,7 @@ dell'interfaccia nell'ultima sezione. Come visto in cap.~\ref{cha:file_unix_interface} le operazioni di I/O sui file sono gestibili a basso livello con l'interfaccia standard unix, che ricorre -direttamente alle system call messe a disposizione dal kernel. +direttamente alle \textit{system call} messe a disposizione dal kernel. Questa interfaccia però non provvede le funzionalità previste dallo standard ANSI C, che invece sono realizzate attraverso opportune funzioni di libreria, @@ -104,20 +105,21 @@ questi tre stream sono identificabili attraverso dei nomi simbolici definiti nell'header \file{stdio.h} che sono: \begin{basedescript}{\desclabelwidth{3.0cm}} -\item[\var{FILE *stdin}] Lo \textit{standard input} cioè lo stream da - cui il processo riceve ordinariamente i dati in ingresso. Normalmente - è associato dalla shell all'input del terminale e prende i caratteri - dalla tastiera. -\item[\var{FILE *stdout}] Lo \textit{standard output} cioè lo stream su - cui il processo invia ordinariamente i dati in uscita. Normalmente è - associato dalla shell all'output del terminale e scrive sullo schermo. -\item[\var{FILE *stderr}] Lo \textit{standard error} cioè lo stream su - cui il processo è supposto inviare i messaggi di errore. Normalmente - anch'esso è associato dalla shell all'output del terminale e scrive - sullo schermo. +\item[\var{FILE *stdin}] Lo \textit{standard input} cioè il \textit{file + stream} da cui il processo riceve ordinariamente i dati in + ingresso. Normalmente è associato dalla shell all'input del terminale e + prende i caratteri dalla tastiera. +\item[\var{FILE *stdout}] Lo \textit{standard output} cioè il \textit{file + stream} su cui il processo invia ordinariamente i dati in + uscita. Normalmente è associato dalla shell all'output del terminale e + scrive sullo schermo. +\item[\var{FILE *stderr}] Lo \textit{standard error} cioè il \textit{file + stream} su cui il processo è supposto inviare i messaggi di + errore. Normalmente anch'esso è associato dalla shell all'output del + terminale e scrive sullo schermo. \end{basedescript} -Nelle \acr{glibc} \var{stdin}, \var{stdout} e \var{stderr} sono effettivamente +Nella \acr{glibc} \var{stdin}, \var{stdout} e \var{stderr} sono effettivamente tre variabili di tipo \type{FILE}\texttt{ *} che possono essere usate come tutte le altre, ad esempio si può effettuare una redirezione dell'output di un programma con il semplice codice: \includecodesnip{listati/redir_stdout.c} ma @@ -1418,11 +1420,11 @@ Ovviamente se si usa un buffer specificato dall'utente questo deve essere stato allocato e rimanere disponibile per tutto il tempo in cui si opera sullo stream. In genere conviene allocarlo con \func{malloc} e disallocarlo dopo la chiusura del file; ma fintanto che il file è usato all'interno di una -funzione, può anche essere usata una variabile automatica. In \file{stdio.h} è -definita la macro \const{BUFSIZ}, che indica le dimensioni generiche del -buffer di uno stream; queste vengono usate dalla funzione \func{setbuf}. Non -è detto però che tale dimensione corrisponda sempre al valore ottimale (che -può variare a seconda del dispositivo). +funzione, può anche essere usata una \index{variabili!automatiche} variabile +automatica. In \file{stdio.h} è definita la macro \const{BUFSIZ}, che indica +le dimensioni generiche del buffer di uno stream; queste vengono usate dalla +funzione \func{setbuf}. Non è detto però che tale dimensione corrisponda +sempre al valore ottimale (che può variare a seconda del dispositivo). Dato che la procedura di allocazione manuale è macchinosa, comporta dei rischi (come delle scritture accidentali sul buffer) e non assicura la scelta delle