#include <db.h> int DB_ENV->memp_register(DB_ENV *env, int ftype, int (*pgin_fcn)(DB_ENV *env, db_pgno_t pgno, void *pgaddr, DBT *pgcookie), int (*pgout_fcn)(DB_ENV *env, db_pgno_t pgno, void *pgaddr, DBT *pgcookie));
The DB_ENV->memp_register()
method registers page-in and page-out
functions for files of type ftype in the cache.
If the pgin_fcn function is non-NULL, it is called each time a page is read into the cache from a file of type ftype, or a page is created for a file of type ftype (see the DB_MPOOL_CREATE flag for the DB_MPOOLFILE->get() method).
If the pgout_fcn function is non-NULL, it is called each time a page is written to a file of type ftype.
The purpose of the DB_ENV->memp_register()
function is to support
processing when pages are entered into, or flushed from, the cache. For example, this
functionality might be used to do byte-endian conversion as pages are read from, or written
to, the underlying file.
A file type must be specified to make it possible for unrelated
threads or processes that are sharing a cache, to evict each other's
pages from the cache. During initialization, applications should call
DB_ENV->memp_register()
for each type of file requiring input or
output processing that will be sharing the underlying cache. (No
registry is necessary for the standard Berkeley DB access method types
because
DB->open()
registers them separately.)
If a thread or process does not call DB_ENV->memp_register()
for a
file type, it is impossible for it to evict pages for any file
requiring input or output processing from the cache. For this reason,
DB_ENV->memp_register()
should always be called by each application
sharing a cache for each type of file included in the cache, regardless
of whether or not the application itself uses files of that type.
The DB_ENV->memp_register()
method returns a non-zero error value on failure and 0 on success.
The ftype parameter specifies the type of file for which the page-in and page-out functions will be called.
The ftype value for a file must be a non-zero positive number less than 128 (0 and negative numbers are reserved for internal use by the Berkeley DB library).
The page-in and page-out functions.
The pgin_fcn and pgout_fcn functions are called with a reference to the current database environment, the page number being read or written, a pointer to the page being read or written, and any parameter pgcookie that was specified to the DB_MPOOLFILE->set_pgcookie() method.
The pgin_fcn and pgout_fcn functions should return 0 on success, and a non-zero value on failure, in which case the shared Berkeley DB library function calling it will also fail, returning that non-zero value. The non-zero value should be selected from values outside of the Berkeley DB library namespace.