blob: 3a18ec80e3b54e59623ce629f214ea000442c097 [file] [log] [blame]
<html lang="en">
<head>
<title>Error Recovery - 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="EOF-and-Errors.html#EOF-and-Errors" title="EOF and Errors">
<link rel="next" href="Binary-Streams.html#Binary-Streams" title="Binary 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="Error-Recovery"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Binary-Streams.html#Binary-Streams">Binary Streams</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="EOF-and-Errors.html#EOF-and-Errors">EOF and Errors</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.16 Recovering from errors</h3>
<p>You may explicitly clear the error and EOF flags with the <code>clearerr</code>
function.
<!-- stdio.h -->
<!-- ISO -->
<div class="defun">
&mdash; Function: void <b>clearerr</b> (<var>FILE *stream</var>)<var><a name="index-clearerr-1102"></a></var><br>
<blockquote><p>This function clears the end-of-file and error indicators for the
stream <var>stream</var>.
<p>The file positioning functions (see <a href="File-Positioning.html#File-Positioning">File Positioning</a>) also clear the
end-of-file indicator for the stream.
</p></blockquote></div>
<!-- stdio.h -->
<!-- GNU -->
<div class="defun">
&mdash; Function: void <b>clearerr_unlocked</b> (<var>FILE *stream</var>)<var><a name="index-clearerr_005funlocked-1103"></a></var><br>
<blockquote><p>The <code>clearerr_unlocked</code> function is equivalent to the <code>clearerr</code>
function except that it does not implicitly lock the stream.
<p>This function is a GNU extension.
</p></blockquote></div>
<p>Note that it is <em>not</em> correct to just clear the error flag and retry
a failed stream operation. After a failed write, any number of
characters since the last buffer flush may have been committed to the
file, while some buffered data may have been discarded. Merely retrying
can thus cause lost or repeated data.
<p>A failed read may leave the file pointer in an inappropriate position for
a second try. In both cases, you should seek to a known position before
retrying.
<p>Most errors that can happen are not recoverable &mdash; a second try will
always fail again in the same way. So usually it is best to give up and
report the error to the user, rather than install complicated recovery
logic.
<p>One important exception is <code>EINTR</code> (see <a href="Interrupted-Primitives.html#Interrupted-Primitives">Interrupted Primitives</a>).
Many stream I/O implementations will treat it as an ordinary error, which
can be quite inconvenient. You can avoid this hassle by installing all
signals with the <code>SA_RESTART</code> flag.
<p>For similar reasons, setting nonblocking I/O on a stream's file
descriptor is not usually advisable.
</body></html>