205 lines
6.8 KiB
HTML
205 lines
6.8 KiB
HTML
<?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.62.4" />
|
||
<link rel="home" href="index.html" title="Getting Started with Berkeley DB" />
|
||
<link rel="up" href="DB.html" title="Chapter 2. Databases" />
|
||
<link rel="previous" href="CoreDBAdmin.html" title="Administrative Methods" />
|
||
<link rel="next" href="CoreEnvUsage.html" title="Managing Databases in Environments" />
|
||
</head>
|
||
<body>
|
||
<div class="navheader">
|
||
<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></div>
|
||
</div>
|
||
<p>
|
||
To simplify error reporting and handling, the
|
||
<span><tt class="classname">DB</tt> structure</span>
|
||
|
||
|
||
offers several useful methods.
|
||
|
||
|
||
|
||
|
||
</p>
|
||
<div class="itemizedlist">
|
||
<ul type="disc">
|
||
<li>
|
||
<p>
|
||
<tt class="methodname">set_errcall()</tt>
|
||
|
||
</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>
|
||
<tt class="methodname">set_errfile()</tt>
|
||
</p>
|
||
<p>
|
||
Sets the C library <tt class="literal">FILE *</tt> to be used for
|
||
displaying error messages issued by the DB library.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>
|
||
<tt class="methodname">set_errpfx()</tt>
|
||
|
||
</p>
|
||
<p>
|
||
Sets the prefix used for any error messages issued by the
|
||
DB library.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>
|
||
<tt class="methodname">err()</tt>
|
||
</p>
|
||
<p>
|
||
Issues an error message. The error message is sent to the
|
||
callback function as defined by <tt class="methodname">set_errcall</tt>.
|
||
If that method has not been used, then the error message is sent to the
|
||
file defined by
|
||
<span><tt class="methodname">set_errfile()</tt>.</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 <tt class="methodname">set_errpfx()</tt>),
|
||
an optional <tt class="literal">printf</tt>-style formatted message,
|
||
the error message, and a trailing newline.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>
|
||
<tt class="methodname">errx()</tt>
|
||
</p>
|
||
<p>
|
||
Behaves identically to <tt class="methodname">err()</tt> 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 <tt class="methodname">db_strerror()</tt>
|
||
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 char *error_prefix, 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="DB.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>
|