blob: c73eee824bf291a198b190507cced04a4f8c1aa1 [file] [log] [blame]
<html lang="en">
<head>
<title>Independent Channels - 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="Stream_002fDescriptor-Precautions.html#Stream_002fDescriptor-Precautions" title="Stream/Descriptor Precautions">
<link rel="prev" href="Linked-Channels.html#Linked-Channels" title="Linked Channels">
<link rel="next" href="Cleaning-Streams.html#Cleaning-Streams" title="Cleaning 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="Independent-Channels"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Cleaning-Streams.html#Cleaning-Streams">Cleaning Streams</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Linked-Channels.html#Linked-Channels">Linked Channels</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Stream_002fDescriptor-Precautions.html#Stream_002fDescriptor-Precautions">Stream/Descriptor Precautions</a>
<hr>
</div>
<h4 class="subsection">13.5.2 Independent Channels</h4>
<p><a name="index-independent-channels-1248"></a>
When you open channels (streams or descriptors) separately on a seekable
file, each channel has its own file position. These are called
<dfn>independent channels</dfn>.
<p>The system handles each channel independently. Most of the time, this
is quite predictable and natural (especially for input): each channel
can read or write sequentially at its own place in the file. However,
if some of the channels are streams, you must take these precautions:
<ul>
<li>You should clean an output stream after use, before doing anything else
that might read or write from the same part of the file.
<li>You should clean an input stream before reading data that may have been
modified using an independent channel. Otherwise, you might read
obsolete data that had been in the stream's buffer.
</ul>
<p>If you do output to one channel at the end of the file, this will
certainly leave the other independent channels positioned somewhere
before the new end. You cannot reliably set their file positions to the
new end of file before writing, because the file can always be extended
by another process between when you set the file position and when you
write the data. Instead, use an append-type descriptor or stream; they
always output at the current end of the file. In order to make the
end-of-file position accurate, you must clean the output channel you
were using, if it is a stream.
<p>It's impossible for two channels to have separate file pointers for a
file that doesn't support random access. Thus, channels for reading or
writing such files are always linked, never independent. Append-type
channels are also always linked. For these channels, follow the rules
for linked channels; see <a href="Linked-Channels.html#Linked-Channels">Linked Channels</a>.
</body></html>