From: Simone Piccardi Date: Sat, 24 Nov 2001 22:50:25 +0000 (+0000) Subject: Si prosegue con le questioni relative alla bufferizzazione X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=commitdiff_plain;h=7f34597c093087273ce7b9e592875ba41d5825bb;p=gapil.git Si prosegue con le questioni relative alla bufferizzazione --- diff --git a/filestd.tex b/filestd.tex index 79fa4fa..43cc123 100644 --- a/filestd.tex +++ b/filestd.tex @@ -117,12 +117,15 @@ funzionalit una degli aspetti più comunemente fraintesi. I caratteri che vengono scritti su uno stream normalmente vengono accumulati e -poi trasmessi in blocco in maniera asincrona, e molto spesso lo stesso avviene -anche per la lettura (cioè dal file viene letto un blocco di dati). Se si sta -facendo dell'input/output interattivo però bisogna tenere presente le -caratteristiche con cui viene effettuata la bufferizzazione, pena il rischio -di non vedere apparire l'output o di ottenere degli effetti indesiderati nella -visualizzazione. +poi trasmessi in blocco in maniera asincrona (quello che viene chiamato il +\textit{flush} dei dati) quando il buffer è pieno, questo tipo di +comportamento vale anche per la lettura (cioè dal file viene letto un blocco +di dati, anche se se ne sono richiesti una quantità inferiore). + +Se si sta facendo dell'input/output interattivo però bisogna tenere presente +le caratteristiche con cui viene effettuata la bufferizzazione, pena il +rischio di non vedere apparire l'output o di ottenere degli effetti +indesiderati nella visualizzazione. Per questo motivo, la libreria definisce tre distinte modalità di bufferizzazione, adatte a situazioni diverse, di cui occorre essere ben @@ -143,12 +146,12 @@ input siano aperti in modalit riferimento ad un dispositivo interattivo, e che lo standard error non sia mai aperto in modalità \textit{fully buffered}. -Linux, come BSD e SRv4, specifica il comportamento di default in maniera più +Linux, come BSD e SVr4, specifica il comportamento di default in maniera più precisa, e cioè impone che lo standard error sia sempre \textit{unbuffered} (in modo che i messaggi di errore siano mostrati il più rapidamente possibile) e che standard input e standard output siano aperti in modalità \textit{line buffered} quando sono associati ad un terminale (od altro dispositivo -interattivo) e in modalità \textit{fully buffered} altrimenti. +interattivo) ed in modalità \textit{fully buffered} altrimenti. Il comportamento specificato per standard input e standard output vale anche per tutti i nuovi stream aperti da un processo; la selezione comunque avviene @@ -156,15 +159,21 @@ automaticamente, e la libreria apre lo stream nella modalit seconda file o al dispositivo scelto. La modalità \textit{line buffered} è quella passibile di maggiori -fraintendimenti, +fraintendimenti, la descrizione che se ne è data infatti non è precisa, dato +che le dimensioni del buffer di I/O sono fisse e se le si eccedono può essere +effettuato un \textit{flush} dei dati anche prima che si sia inviato un +carattere di \textit{newline}. + + \section{Funzioni base} \label{sec:file_ansi_base_func} Esamineremo in questa sezione le funzioni base dell'interfaccia degli stream, -analoghe a quelle di \secref{} per i file descriptor. In particolare vedremo -come aprire, leggere, scrivere e cambiare la posizione corrente in uno stream. +analoghe a quelle di \secref{sec:file_base_func} per i file descriptor. In +particolare vedremo come aprire, leggere, scrivere e cambiare la posizione +corrente in uno stream. \subsection{Apertura di uno stream}