blob: e0da262738850dd3fc45538d31c1624e87f6ccdc [file] [log] [blame]
<html lang="en">
<head>
<title>Stream Buffering - The GNU C Library</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="The GNU C Library">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="I_002fO-on-Streams.html#I_002fO-on-Streams" title="I/O on Streams">
<link rel="prev" href="Portable-Positioning.html#Portable-Positioning" title="Portable Positioning">
<link rel="next" href="Other-Kinds-of-Streams.html#Other-Kinds-of-Streams" title="Other Kinds of Streams">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
This file documents the GNU C library.
This is Edition 0.12, last updated 2007-10-27,
of `The GNU C Library Reference Manual', for version
2.8 (Sourcery G++ Lite 2011.03-41).
Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002,
2003, 2007, 2008, 2010 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software Needs Free Documentation''
and ``GNU Lesser General Public License'', the Front-Cover texts being
``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A
copy of the license is included in the section entitled "GNU Free
Documentation License".
(a) The FSF's Back-Cover Text is: ``You have the freedom to
copy and modify this GNU manual. Buying copies from the FSF
supports it in developing GNU and promoting software freedom.''-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="Stream-Buffering"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Other-Kinds-of-Streams.html#Other-Kinds-of-Streams">Other Kinds of Streams</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Portable-Positioning.html#Portable-Positioning">Portable Positioning</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="I_002fO-on-Streams.html#I_002fO-on-Streams">I/O on Streams</a>
<hr>
</div>
<h3 class="section">12.20 Stream Buffering</h3>
<p><a name="index-buffering-of-streams-1131"></a>Characters that are written to a stream are normally accumulated and
transmitted asynchronously to the file in a block, instead of appearing
as soon as they are output by the application program. Similarly,
streams often retrieve input from the host environment in blocks rather
than on a character-by-character basis. This is called <dfn>buffering</dfn>.
<p>If you are writing programs that do interactive input and output using
streams, you need to understand how buffering works when you design the
user interface to your program. Otherwise, you might find that output
(such as progress or prompt messages) doesn't appear when you intended
it to, or displays some other unexpected behavior.
<p>This section deals only with controlling when characters are transmitted
between the stream and the file or device, and <em>not</em> with how
things like echoing, flow control, and the like are handled on specific
classes of devices. For information on common control operations on
terminal devices, see <a href="Low_002dLevel-Terminal-Interface.html#Low_002dLevel-Terminal-Interface">Low-Level Terminal Interface</a>.
<p>You can bypass the stream buffering facilities altogether by using the
low-level input and output functions that operate on file descriptors
instead. See <a href="Low_002dLevel-I_002fO.html#Low_002dLevel-I_002fO">Low-Level I/O</a>.
<ul class="menu">
<li><a accesskey="1" href="Buffering-Concepts.html#Buffering-Concepts">Buffering Concepts</a>: Terminology is defined here.
<li><a accesskey="2" href="Flushing-Buffers.html#Flushing-Buffers">Flushing Buffers</a>: How to ensure that output buffers are flushed.
<li><a accesskey="3" href="Controlling-Buffering.html#Controlling-Buffering">Controlling Buffering</a>: How to specify what kind of buffering to use.
</ul>
</body></html>