ex_env.c
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

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