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

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1997, 1998, 1999, 2000
  5.  * Sleepycat Software.  All rights reserved.
  6.  *
  7.  * $Id: ex_access.c,v 11.7 2000/05/22 15:17:03 sue Exp $
  8.  */
  9. #include "db_config.h"
  10. #ifndef NO_SYSTEM_INCLUDES
  11. #include <sys/types.h>
  12. #include <stdlib.h>
  13. #include <string.h>
  14. #include <unistd.h>
  15. #endif
  16. #include <db.h>
  17. #ifdef HAVE_VXWORKS
  18. #include "stdio.h"
  19. #define DATABASE "/vxtmp/vxtmp/access.db"
  20. #define ERROR_RETURN ERROR
  21. #else
  22. #define DATABASE "access.db"
  23. #define ERROR_RETURN 1
  24. int main __P((int, char *[]));
  25. void usage __P((char *));
  26. #endif
  27. int ex_access __P((void));
  28. #ifndef HAVE_VXWORKS
  29. int
  30. main(argc, argv)
  31. int argc;
  32. char *argv[];
  33. {
  34. extern char *optarg;
  35. extern int optind;
  36. int ch;
  37. while ((ch = getopt(argc, argv, "")) != EOF)
  38. switch (ch) {
  39. case '?':
  40. default:
  41. usage(argv[0]);
  42. }
  43. argc -= optind;
  44. argv += optind;
  45. return (ex_access());
  46. }
  47. void
  48. usage(progname)
  49. char *progname;
  50. {
  51. (void)fprintf(stderr, "usage: %sn", progname);
  52. exit(1);
  53. }
  54. #endif
  55. int
  56. ex_access()
  57. {
  58. DB *dbp;
  59. DBC *dbcp;
  60. DBT key, data;
  61. u_int32_t len;
  62. int ret;
  63. char *p, *t, buf[1024], rbuf[1024];
  64. const char *progname = "ex_access"; /* Program name. */
  65. /* Remove the previous database. */
  66. (void)unlink(DATABASE);
  67. /* Create and initialize database object, open the database. */
  68. if ((ret = db_create(&dbp, NULL, 0)) != 0) {
  69. fprintf(stderr,
  70.     "%s: db_create: %sn", progname, db_strerror(ret));
  71. return (ERROR_RETURN);
  72. }
  73. dbp->set_errfile(dbp, stderr);
  74. dbp->set_errpfx(dbp, progname);
  75. if ((ret = dbp->set_pagesize(dbp, 1024)) != 0) {
  76. dbp->err(dbp, ret, "set_pagesize");
  77. goto err1;
  78. }
  79. if ((ret = dbp->set_cachesize(dbp, 0, 32 * 1024, 0)) != 0) {
  80. dbp->err(dbp, ret, "set_cachesize");
  81. goto err1;
  82. }
  83. if ((ret =
  84.     dbp->open(dbp, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
  85. dbp->err(dbp, ret, "%s: open", DATABASE);
  86. goto err1;
  87. }
  88. /*
  89.  * Insert records into the database, where the key is the user
  90.  * input and the data is the user input in reverse order.
  91.  */
  92. memset(&key, 0, sizeof(DBT));
  93. memset(&data, 0, sizeof(DBT));
  94. for (;;) {
  95. printf("input> ");
  96. fflush(stdout);
  97. if (fgets(buf, sizeof(buf), stdin) == NULL)
  98. break;
  99. if ((len = strlen(buf)) <= 1)
  100. continue;
  101. for (t = rbuf, p = buf + (len - 2); p >= buf;)
  102. *t++ = *p--;
  103. *t++ = '';
  104. key.data = buf;
  105. data.data = rbuf;
  106. data.size = key.size = len - 1;
  107. switch (ret =
  108.     dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE)) {
  109. case 0:
  110. break;
  111. default:
  112. dbp->err(dbp, ret, "DB->put");
  113. if (ret != DB_KEYEXIST)
  114. goto err1;
  115. break;
  116. }
  117. }
  118. printf("n");
  119. /* Acquire a cursor for the database. */
  120. if ((ret = dbp->cursor(dbp, NULL, &dbcp, 0)) != 0) {
  121. dbp->err(dbp, ret, "DB->cursor");
  122. goto err1;
  123. }
  124. /* Initialize the key/data pair so the flags aren't set. */
  125. memset(&key, 0, sizeof(key));
  126. memset(&data, 0, sizeof(data));
  127. /* Walk through the database and print out the key/data pairs. */
  128. while ((ret = dbcp->c_get(dbcp, &key, &data, DB_NEXT)) == 0)
  129. printf("%.*s : %.*sn",
  130.     (int)key.size, (char *)key.data,
  131.     (int)data.size, (char *)data.data);
  132. if (ret != DB_NOTFOUND) {
  133. dbp->err(dbp, ret, "DBcursor->get");
  134. goto err2;
  135. }
  136. /* Close everything down. */
  137. if ((ret = dbcp->c_close(dbcp)) != 0) {
  138. dbp->err(dbp, ret, "DBcursor->close");
  139. goto err1;
  140. }
  141. if ((ret = dbp->close(dbp, 0)) != 0) {
  142. fprintf(stderr,
  143.     "%s: DB->close: %sn", progname, db_strerror(ret));
  144. return (ERROR_RETURN);
  145. }
  146. return (0);
  147. err2: (void)dbcp->c_close(dbcp);
  148. err1: (void)dbp->close(dbp, 0);
  149. return (ERROR_RETURN);
  150. }