%% filestd.tex
%%
-%% Copyright (C) 2000-2011 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2012 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
(tanto che in certi casi il termine di puntatore a file è diventato sinonimo
di \textit{stream}). Tutte le funzioni della libreria che operano sui file
accettano come argomenti solo variabili di questo tipo, che diventa
-accessibile includendo l'header file \file{stdio.h}.
+accessibile includendo l'header file \headfile{stdio.h}.
\subsection{Gli \textit{stream standard}}
per ogni processo, corrispondono altrettanti \textit{stream}, che
rappresentano i canali standard di input/output prestabiliti; anche questi tre
\textit{stream} sono identificabili attraverso dei nomi simbolici definiti
-nell'header \file{stdio.h} che sono:
+nell'header \headfile{stdio.h} che sono:
\begin{basedescript}{\desclabelwidth{3.0cm}}
\item[\var{FILE *stdin}] Lo \textit{standard input} cioè il \textit{file
maggior parte dei casi questo avviene con la restituzione del valore
intero (di tipo \ctyp{int}) \val{EOF}\footnote{la costante deve essere
negativa, le \acr{glibc} usano -1, altre implementazioni possono avere
- valori diversi.} definito anch'esso nell'header \file{stdlib.h}.
+ valori diversi.} definito anch'esso nell'header \headfile{stdlib.h}.
Dato che le funzioni dell'interfaccia degli \textit{stream} sono funzioni di
libreria che si appoggiano a delle system call, esse non impostano
Entrambi i flag (di errore e di end-of-file) possono essere cancellati usando
la funzione \funcd{clearerr}, il cui prototipo è:
\begin{prototype}{stdio.h}{void clearerr(FILE *stream)}
- Cancella i flag di errore ed end-of-file di \param{stream}.
+ Cancella i flag di errore ed \textit{end-of-file} di \param{stream}.
\end{prototype}
\noindent in genere si usa questa funzione una volta che si sia identificata e
corretta la causa di un errore per evitare di mantenere i flag attivi, così da
Per questo motivo le \acr{glibc} prevedono, come estensione GNU, due nuove
funzioni per la gestione dell'input/output di linea, il cui uso permette di
risolvere questi problemi. L'uso di queste funzioni deve essere attivato
-definendo la macro \macro{\_GNU\_SOURCE} prima di includere \file{stdio.h}. La
-prima delle due, \funcd{getline}, serve per leggere una linea terminata da un
-newline, esattamente allo stesso modo di \func{fgets}, il suo prototipo è:
+definendo la macro \macro{\_GNU\_SOURCE} prima di includere
+\headfile{stdio.h}. La prima delle due, \funcd{getline}, serve per leggere una
+linea terminata da un newline, esattamente allo stesso modo di \func{fgets},
+il suo prototipo è:
\begin{prototype}{stdio.h}
{ssize\_t getline(char **buffer, size\_t *n, FILE *stream)} Legge una linea
dal file \param{stream} copiandola sul buffer indicato da \param{buffer}
la stringa non serve più, onde evitare \itindex{memory~leak} \textit{memory
leak}.
+% TODO verificare se mettere prototipi di \func{dprintf} e \func{vdprintf}
+
Infine una ulteriore estensione GNU definisce le due funzioni \func{dprintf} e
\func{vdprintf}, che prendono un file descriptor al posto dello
\textit{stream}. Altre estensioni permettono di scrivere con caratteri
\textit{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 \index{variabili!automatiche} variabile
-automatica. In \file{stdio.h} è definita la macro \const{BUFSIZ}, che indica
-le dimensioni generiche del buffer di uno \textit{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).
+automatica. In \headfile{stdio.h} è definita la macro \const{BUFSIZ}, che
+indica le dimensioni generiche del buffer di uno \textit{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
di blocco dello \textit{stream}.
\end{basedescript}
+% TODO trattare \func{clearerr\_unlocked}
+
+
\itindend{thread}