⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbdemo.c

📁 linux 下的源代码分析阅读器 red hat公司新版
💻 C
字号:
/*- * See the file LICENSE for redistribution information. * * Copyright (c) 1997,2007 Oracle.  All rights reserved. * * $Id: ex_access.c,v 12.6 2007/05/17 15:15:12 bostic Exp $ */#include <sys/types.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#ifdef _WIN32extern int getopt(int, char * const *, const char *);#else#include <unistd.h>#endif#include <db_config.h>#include <db_int.h>#define	DATABASE	"access.db"int dbdemo_main __P((int, char *[]));int dbdemo_usage __P((void));intdbdemo(args)	char *args;{	int argc;	char **argv;	__db_util_arg("dbdemo", args, &argc, &argv);	return (dbdemo_main(argc, argv) ? EXIT_FAILURE : EXIT_SUCCESS);}#include <stdio.h>#define	ERROR_RETURN	ERRORintdbdemo_main(argc, argv)	int argc;	char *argv[];{	extern int optind, __db_getopt_reset;	DB *dbp;	DBC *dbcp;	DBT key, data;	size_t len;	int ch, ret, rflag;	char *database, *p, *t, buf[1024], rbuf[1024];	const char *progname = "dbdemo";		/* Program name. */	rflag = 0;	__db_getopt_reset = 1;	while ((ch = getopt(argc, argv, "r")) != EOF)		switch (ch) {		case 'r':			rflag = 1;			break;		case '?':		default:			return (dbdemo_usage());		}	argc -= optind;	argv += optind;	/* Accept optional database name. */	database = *argv == NULL ? DATABASE : argv[0];	/* Optionally discard the database. */	if (rflag)		(void)remove(database);	/* Create and initialize database object, open the database. */	if ((ret = db_create(&dbp, NULL, 0)) != 0) {		fprintf(stderr,		    "%s: db_create: %s\n", progname, db_strerror(ret));		return (EXIT_FAILURE);	}	dbp->set_errfile(dbp, stderr);	dbp->set_errpfx(dbp, progname);	if ((ret = dbp->set_pagesize(dbp, 1024)) != 0) {		dbp->err(dbp, ret, "set_pagesize");		goto err1;	}	if ((ret = dbp->set_cachesize(dbp, 0, 32 * 1024, 0)) != 0) {		dbp->err(dbp, ret, "set_cachesize");		goto err1;	}	if ((ret = dbp->open(dbp,	    NULL, database, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {		dbp->err(dbp, ret, "%s: open", database);		goto err1;	}	/*	 * Insert records into the database, where the key is the user	 * input and the data is the user input in reverse order.	 */	memset(&key, 0, sizeof(DBT));	memset(&data, 0, sizeof(DBT));	for (;;) {		printf("input> ");		fflush(stdout);		if (fgets(buf, sizeof(buf), stdin) == NULL)			break;		if (strcmp(buf, "exit\n") == 0 || strcmp(buf, "quit\n") == 0)			break;		if ((len = strlen(buf)) <= 1)			continue;		for (t = rbuf, p = buf + (len - 2); p >= buf;)			*t++ = *p--;		*t++ = '\0';		key.data = buf;		data.data = rbuf;		data.size = key.size = (u_int32_t)len - 1;		switch (ret =		    dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE)) {		case 0:			break;		default:			dbp->err(dbp, ret, "DB->put");			if (ret != DB_KEYEXIST)				goto err1;			break;		}	}	printf("\n");	/* Acquire a cursor for the database. */	if ((ret = dbp->cursor(dbp, NULL, &dbcp, 0)) != 0) {		dbp->err(dbp, ret, "DB->cursor");		goto err1;	}	/* Initialize the key/data pair so the flags aren't set. */	memset(&key, 0, sizeof(key));	memset(&data, 0, sizeof(data));	/* Walk through the database and print out the key/data pairs. */	while ((ret = dbcp->get(dbcp, &key, &data, DB_NEXT)) == 0)		printf("%.*s : %.*s\n",		    (int)key.size, (char *)key.data,		    (int)data.size, (char *)data.data);	if (ret != DB_NOTFOUND) {		dbp->err(dbp, ret, "DBcursor->get");		goto err2;	}	/* Close everything down. */	if ((ret = dbcp->close(dbcp)) != 0) {		dbp->err(dbp, ret, "DBcursor->close");		goto err1;	}	if ((ret = dbp->close(dbp, 0)) != 0) {		fprintf(stderr,		    "%s: DB->close: %s\n", progname, db_strerror(ret));		return (EXIT_FAILURE);	}	return (EXIT_SUCCESS);err2:	(void)dbcp->close(dbcp);err1:	(void)dbp->close(dbp, 0);	return (EXIT_FAILURE);}intdbdemo_usage(){	(void)fprintf(stderr, "usage: ex_access [-r] [database]\n");	return (EXIT_FAILURE);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -