blob: fff78833954a706378274d4629d7f8d7e37f41c8 [file] [log] [blame]
<html lang="en">
<head>
<title>I/O Queues - 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="Low_002dLevel-Terminal-Interface.html#Low_002dLevel-Terminal-Interface" title="Low-Level Terminal Interface">
<link rel="prev" href="Is-It-a-Terminal.html#Is-It-a-Terminal" title="Is It a Terminal">
<link rel="next" href="Canonical-or-Not.html#Canonical-or-Not" title="Canonical or Not">
<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="I%2fO-Queues"></a>
<a name="I_002fO-Queues"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Canonical-or-Not.html#Canonical-or-Not">Canonical or Not</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Is-It-a-Terminal.html#Is-It-a-Terminal">Is It a Terminal</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Low_002dLevel-Terminal-Interface.html#Low_002dLevel-Terminal-Interface">Low-Level Terminal Interface</a>
<hr>
</div>
<h3 class="section">17.2 I/O Queues</h3>
<p>Many of the remaining functions in this section refer to the input and
output queues of a terminal device. These queues implement a form of
buffering <em>within the kernel</em> independent of the buffering
implemented by I/O streams (see <a href="I_002fO-on-Streams.html#I_002fO-on-Streams">I/O on Streams</a>).
<p><a name="index-terminal-input-queue-1851"></a><a name="index-typeahead-buffer-1852"></a>The <dfn>terminal input queue</dfn> is also sometimes referred to as its
<dfn>typeahead buffer</dfn>. It holds the characters that have been received
from the terminal but not yet read by any process.
<p>The size of the input queue is described by the <code>MAX_INPUT</code> and
<code>_POSIX_MAX_INPUT</code><!-- /@w --> parameters; see <a href="Limits-for-Files.html#Limits-for-Files">Limits for Files</a>. You
are guaranteed a queue size of at least <code>MAX_INPUT</code>, but the queue
might be larger, and might even dynamically change size. If input flow
control is enabled by setting the <code>IXOFF</code> input mode bit
(see <a href="Input-Modes.html#Input-Modes">Input Modes</a>), the terminal driver transmits STOP and START
characters to the terminal when necessary to prevent the queue from
overflowing. Otherwise, input may be lost if it comes in too fast from
the terminal. In canonical mode, all input stays in the queue until a
newline character is received, so the terminal input queue can fill up
when you type a very long line. See <a href="Canonical-or-Not.html#Canonical-or-Not">Canonical or Not</a>.
<p><a name="index-terminal-output-queue-1853"></a>The <dfn>terminal output queue</dfn> is like the input queue, but for output;
it contains characters that have been written by processes, but not yet
transmitted to the terminal. If output flow control is enabled by
setting the <code>IXON</code> input mode bit (see <a href="Input-Modes.html#Input-Modes">Input Modes</a>), the
terminal driver obeys START and STOP characters sent by the terminal to
stop and restart transmission of output.
<p><dfn>Clearing</dfn> the terminal input queue means discarding any characters
that have been received but not yet read. Similarly, clearing the
terminal output queue means discarding any characters that have been
written but not yet transmitted.
</body></html>