Berkeley DB: memp_register
Полезная информация


#include <db.h>

int memp_register(DB_MPOOL *mp, int ftype, int (*pgin)(db_pgno_t pgno, void *pgaddr, DBT *pgcookie), int (*pgout)(db_pgno_t pgno, void *pgaddr, DBT *pgcookie));


The memp_register function registers page-in and page-out functions for files of type ftype in the specified pool.

If the pgin function is non-NULL, it is called each time a page is read into the memory pool 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 memp_fget function).

If the pgout function is non-NULL, it is called each time a page is written to a file of type ftype.

Both the pgin and pgout functions are called with the page number, a pointer to the page being read or written, and any argument pgcookie that was specified to the memp_fopen function when the file was opened. The pgin and pgout functions should return 0 on success, and an applicable non-zero errno value on failure, in which case the shared memory pool interface routine (and, by extension, any Berkeley DB library function) calling it will also fail, returning that errno value.

The purpose of the memp_register function is to support processing when pages are entered into, or flushed from, the pool. A file type must be specified to make it possible for unrelated threads or processes, that are sharing a pool, to evict each other's pages from the pool. Applications should call memp_register, during initialization, for each type of file requiring input or output processing that will be sharing the underlying pool. (No registry is necessary for the standard access method types, btree, hash and recno, as db_open registers them separately.)

If a thread or process does not call memp_register for a file type, it is impossible for it to evict pages for any file requiring input or output processing from the pool. For this reason, memp_register should always be called by each application sharing a pool for each type of file included in the pool, regardless of whether or not the application itself uses files of that type.

There are no standard values for ftype, pgin, pgout and pgcookie, except that the ftype value for a file must be a non-zero positive number, as negative numbers are reserved for internal use by the Berkeley DB library. For this reason, applications sharing a pool must coordinate their values amongst themselves.

The memp_register function returns the value of errno on failure, and 0 on success.


If a fatal error occurs in Berkeley DB, the memp_register function may fail and return DB_RUNRECOVERY, at which point all subsequent database calls will also return DB_RUNRECOVERY.

The memp_register function may fail and return errno for any of the errors specified for the following Berkeley DB and C library functions: abort(3), fcntl(3), fprintf(3), getpid(3), malloc(3), and memset(3).

See Also

memp_close, memp_fclose, memp_fget, memp_fopen, memp_fput, memp_fset, memp_fsync, memp_open, memp_register, memp_stat, memp_stat, memp_sync, memp_trickle and memp_unlink.