1/*- 2 * See the file LICENSE for redistribution information. 3 * 4 * Copyright (c) 1996,2008 Oracle. All rights reserved. 5 * 6 * $Id: ex_env.c,v 12.6 2008/01/08 20:58:23 bostic Exp $ 7 */ 8 9#include <sys/types.h> 10 11#include <stddef.h> 12#include <stdio.h> 13#include <stdlib.h> 14 15#include <db.h> 16 17#ifdef macintosh 18#define DATABASE_HOME ":database" 19#define CONFIG_DATA_DIR ":database" 20#else 21#ifdef DB_WIN32 22#define DATABASE_HOME "\\tmp\\database" 23#define CONFIG_DATA_DIR "\\database\\files" 24#else 25#define DATABASE_HOME "/tmp/database" 26#define CONFIG_DATA_DIR "/database/files" 27#endif 28#endif 29 30int db_setup __P((const char *, const char *, FILE *, const char *)); 31int db_teardown __P((const char *, const char *, FILE *, const char *)); 32int main __P((void)); 33 34/* 35 * An example of a program creating/configuring a Berkeley DB environment. 36 */ 37int 38main() 39{ 40 const char *data_dir, *home; 41 const char *progname = "ex_env"; /* Program name. */ 42 43 /* 44 * All of the shared database files live in DATABASE_HOME, but 45 * data files will live in CONFIG_DATA_DIR. 46 */ 47 home = DATABASE_HOME; 48 data_dir = CONFIG_DATA_DIR; 49 50 printf("Setup env\n"); 51 if (db_setup(home, data_dir, stderr, progname) != 0) 52 return (EXIT_FAILURE); 53 54 printf("Teardown env\n"); 55 if (db_teardown(home, data_dir, stderr, progname) != 0) 56 return (EXIT_FAILURE); 57 58 return (EXIT_SUCCESS); 59} 60 61int 62db_setup(home, data_dir, errfp, progname) 63 const char *home, *data_dir, *progname; 64 FILE *errfp; 65{ 66 DB_ENV *dbenv; 67 int ret; 68 69 /* 70 * Create an environment object and initialize it for error 71 * reporting. 72 */ 73 if ((ret = db_env_create(&dbenv, 0)) != 0) { 74 fprintf(errfp, "%s: %s\n", progname, db_strerror(ret)); 75 return (1); 76 } 77 dbenv->set_errfile(dbenv, errfp); 78 dbenv->set_errpfx(dbenv, progname); 79 80 /* 81 * We want to specify the shared memory buffer pool cachesize, 82 * but everything else is the default. 83 */ 84 if ((ret = dbenv->set_cachesize(dbenv, 0, 64 * 1024, 0)) != 0) { 85 dbenv->err(dbenv, ret, "set_cachesize"); 86 dbenv->close(dbenv, 0); 87 return (1); 88 } 89 90 /* Databases are in a subdirectory. */ 91 (void)dbenv->set_data_dir(dbenv, data_dir); 92 93 /* Open the environment with full transactional support. */ 94 if ((ret = dbenv->open(dbenv, home, 95 DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN, 96 0)) != 0) { 97 dbenv->err(dbenv, ret, "environment open: %s", home); 98 dbenv->close(dbenv, 0); 99 return (1); 100 } 101 102 /* Do something interesting... */ 103 104 /* Close the handle. */ 105 if ((ret = dbenv->close(dbenv, 0)) != 0) { 106 fprintf(stderr, "DB_ENV->close: %s\n", db_strerror(ret)); 107 return (1); 108 } 109 return (0); 110} 111 112int 113db_teardown(home, data_dir, errfp, progname) 114 const char *home, *data_dir, *progname; 115 FILE *errfp; 116{ 117 DB_ENV *dbenv; 118 int ret; 119 120 /* Remove the shared database regions. */ 121 if ((ret = db_env_create(&dbenv, 0)) != 0) { 122 fprintf(errfp, "%s: %s\n", progname, db_strerror(ret)); 123 return (1); 124 } 125 dbenv->set_errfile(dbenv, errfp); 126 dbenv->set_errpfx(dbenv, progname); 127 128 (void)dbenv->set_data_dir(dbenv, data_dir); 129 if ((ret = dbenv->remove(dbenv, home, 0)) != 0) { 130 fprintf(stderr, "DB_ENV->remove: %s\n", db_strerror(ret)); 131 return (1); 132 } 133 return (0); 134} 135