1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Error Reporting Functions</title>
<link rel="stylesheet" href="gettingStarted.css" type="text/css" />
<meta name="generator" content="DocBook XSL Stylesheets V1.73.2" />
<link rel="start" href="index.html" title="Getting Started with Berkeley DB" />
<link rel="up" href="databases.html" title="Chapter 2. Databases" />
<link rel="prev" href="CoreDBAdmin.html" title="Administrative Methods" />
<link rel="next" href="CoreEnvUsage.html" title="Managing Databases in Environments" />
</head>
<body>
<div xmlns="" class="navheader">
<div class="libver">
<p>Library Version 11.2.5.3</p>
</div>
<table width="100%" summary="Navigation header">
<tr>
<th colspan="3" align="center">Error Reporting Functions</th>
</tr>
<tr>
<td width="20%" align="left"><a accesskey="p" href="CoreDBAdmin.html">Prev</a> </td>
<th width="60%" align="center">Chapter 2. Databases</th>
<td width="20%" align="right"> <a accesskey="n" href="CoreEnvUsage.html">Next</a></td>
</tr>
</table>
<hr />
</div>
<div class="sect1" lang="en" xml:lang="en">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a id="dbErrorReporting"></a>Error Reporting Functions</h2>
</div>
</div>
</div>
<p>
To simplify error reporting and handling, the
<span><code class="classname">DB</code> structure</span>
offers several useful methods.
</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>
<code class="methodname">set_errcall()</code>
</p>
<p>
Defines the function that is called when an error message is
issued by DB. The error prefix and message are passed to
this callback. It is up to the application to display this
information correctly.
</p>
</li>
<li>
<p>
<code class="methodname">set_errfile()</code>
</p>
<p>
Sets the C library <code class="literal">FILE *</code> to be used for
displaying error messages issued by the DB library.
</p>
</li>
<li>
<p>
<code class="methodname">set_errpfx()</code>
</p>
<p>
Sets the prefix used for any error messages issued by the
DB library.
</p>
</li>
<li>
<p>
<code class="methodname">err()</code>
</p>
<p>
Issues an error message. The error message is sent to the
callback function as defined by <code class="methodname">set_errcall</code>.
If that method has not been used, then the error message is sent to the
file defined by
<span><code class="methodname">set_errfile()</code>.</span>
If none of these methods have been used, then the error message is sent to
standard error.
</p>
<p>
The error message consists of the prefix string
(as defined by <code class="methodname">set_errpfx()</code>),
an optional <code class="literal">printf</code>-style formatted message,
the error message, and a trailing newline.
</p>
</li>
<li>
<p>
<code class="methodname">errx()</code>
</p>
<p>
Behaves identically to <code class="methodname">err()</code> except
that the DB message text associated with the supplied error
value is not appended to the error string.
</p>
</li>
</ul>
</div>
<p>
In addition, you can use the <code class="methodname">db_strerror()</code>
function to directly return the error string that corresponds to a
particular error number.
</p>
<p>
For example, to send all error messages for a given database handle
to a callback for handling, first create your callback. Do something like this:
</p>
<a id="c_db8"></a>
<pre class="programlisting">/*
* Function called to handle any database error messages
* issued by DB.
*/
void
my_error_handler(const DB_ENV *dbenv, const char *error_prefix,
const char *msg)
{
/*
* Put your code to handle the error prefix and error
* message here. Note that one or both of these parameters
* may be NULL depending on how the error message is issued
* and how the DB handle is configured.
*/
} </pre>
<p>
And then register the callback as follows:
</p>
<a id="c_db9"></a>
<pre class="programlisting">#include <db.h>
#include <stdio.h>
...
DB *dbp;
int ret;
/*
* Create a database and initialize it for error
* reporting.
*/
ret = db_create(&dbp, NULL, 0);
if (ret != 0) {
fprintf(stderr, "%s: %s\n", "my_program",
db_strerror(ret));
return(ret);
}
/* Set up error handling for this database */
dbp->set_errcall(dbp, my_error_handler);
dbp->set_errpfx(dbp, "my_example_program"); </pre>
<p>
And to issue an error message:
</p>
<a id="c_db10"></a>
<pre class="programlisting">ret = dbp->open(dbp,
NULL,
"mydb.db",
NULL,
DB_BTREE,
DB_CREATE,
0);
if (ret != 0) {
dbp->err(dbp, ret,
"Database open failed: %s", "mydb.db");
return(ret);
}</pre>
<span>
</span>
</div>
<div class="navfooter">
<hr />
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left"><a accesskey="p" href="CoreDBAdmin.html">Prev</a> </td>
<td width="20%" align="center">
<a accesskey="u" href="databases.html">Up</a>
</td>
<td width="40%" align="right"> <a accesskey="n" href="CoreEnvUsage.html">Next</a></td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Administrative Methods </td>
<td width="20%" align="center">
<a accesskey="h" href="index.html">Home</a>
</td>
<td width="40%" align="right" valign="top"> Managing Databases in Environments</td>
</tr>
</table>
</div>
</body>
</html>
|