|
Comprehensive C Archive Network |
|---|
| Upload Code | Download Code | About |
| Browse Source | Download (without any required ccan dependencies) |
Module:tdb |
Summary:The trivial (transactional) database |
Maintainer:Rusty Russell <rusty@rustcorp.com.au> |
Author:Andrew Tridgell, Jeremy Allison, Rusty Russell |
Dependencies:ccan/compiler |
Description:The tdb module provides an efficient keyword data mapping (usually within a file). It supports transactions, so the contents of the database is reliable even across crashes. |
Example:#include <ccan/tdb/tdb.h>
#include <ccan/str/str.h>
#include <err.h>
#include <stdio.h>
static void usage(const char *argv0)
{
errx(1, "Usage: %s fetch <dbfile> <key>\n"
"OR %s store <dbfile> <key> <data>", argv0, argv0);
}
int main(int argc, char *argv[])
{
struct tdb_context *tdb;
TDB_DATA key, value;
if (argc < 4)
usage(argv[0]);
tdb = tdb_open(argv[2], 1024, TDB_DEFAULT, O_CREAT|O_RDWR,
0600);
if (!tdb)
err(1, "Opening %s", argv[2]);
key.dptr = (void *)argv[3];
key.dsize = strlen(argv[3]);
if (streq(argv[1], "fetch")) {
if (argc != 4)
usage(argv[0]);
value = tdb_fetch(tdb, key);
if (!value.dptr)
errx(1, "fetch %s: %s",
argv[3], tdb_errorstr(tdb));
printf("%.*s\n", value.dsize, (char *)value.dptr);
free(value.dptr);
} else if (streq(argv[1], "store")) {
if (argc != 5)
usage(argv[0]);
value.dptr = (void *)argv[4];
value.dsize = strlen(argv[4]);
if (tdb_store(tdb, key, value, 0) != 0)
errx(1, "store %s: %s",
argv[3], tdb_errorstr(tdb));
} else
usage(argv[0]);
return 0;
}
|
License:LGPL (v3 or any later version) |