|
|
1.1 ! root 1: .\" Copyright (c) 1980 Regents of the University of California. ! 2: .\" All rights reserved. The Berkeley software License Agreement ! 3: .\" specifies the terms and conditions for redistribution. ! 4: .\" ! 5: .\" @(#)dbm.3 6.4 (Berkeley) 4/10/89 ! 6: .\" ! 7: .TH DBM 3X "April 10, 1989" ! 8: .UC 4 ! 9: .SH NAME ! 10: dbminit, fetch, store, delete, firstkey, nextkey \- data base subroutines ! 11: .SH SYNOPSIS ! 12: .nf ! 13: .PP ! 14: .B "#include <dbm.h>" ! 15: .PP ! 16: .B typedef struct { ! 17: .B " char *dptr;" ! 18: .B " int dsize;" ! 19: .B } datum; ! 20: .PP ! 21: .B dbminit(file) ! 22: .B char *file; ! 23: .PP ! 24: .B datum fetch(key) ! 25: .B datum key; ! 26: .PP ! 27: .B store(key, content) ! 28: .B datum key, content; ! 29: .PP ! 30: .B delete(key) ! 31: .B datum key; ! 32: .PP ! 33: .B datum firstkey() ! 34: .PP ! 35: .B datum nextkey(key) ! 36: .B datum key; ! 37: .SH DESCRIPTION ! 38: .ft B ! 39: The dbm library has been obsoleted by ndbm(3), ! 40: and is now implemented using ndbm. ! 41: .ft R ! 42: .PP ! 43: These functions maintain key/content pairs in a data base. ! 44: The functions will handle very large (a billion blocks) ! 45: databases and will access a keyed item in one or two file system accesses. ! 46: The functions are obtained with the loader option ! 47: .BR \-ldbm . ! 48: .PP ! 49: .IR Key s ! 50: and ! 51: .IR content s ! 52: are described by the ! 53: .I datum ! 54: typedef. A ! 55: .I datum ! 56: specifies a string of ! 57: .I dsize ! 58: bytes pointed to by ! 59: .I dptr. ! 60: Arbitrary binary data, as well as normal ASCII strings, are allowed. ! 61: The data base is stored in two files. ! 62: One file is a directory containing a bit map and has `.dir' as its suffix. ! 63: The second file contains all data and has `.pag' as its suffix. ! 64: .PP ! 65: Before a database can be accessed, it must be opened by ! 66: .I dbminit. ! 67: At the time of this call, the files ! 68: .IB file .dir ! 69: and ! 70: .IB file .pag ! 71: must exist. ! 72: (An empty database is created by creating zero-length ! 73: `.dir' and `.pag' files.) ! 74: .PP ! 75: Once open, the data stored under a key is accessed by ! 76: .I fetch ! 77: and data is placed under a key by ! 78: .IR store . ! 79: A key (and its associated contents) is deleted by ! 80: .IR delete . ! 81: A linear pass through all keys in a database may be made, ! 82: in an (apparently) random order, by use of ! 83: .I firstkey ! 84: and ! 85: .IR nextkey . ! 86: .I Firstkey ! 87: will return the first key in the database. With any key ! 88: .I nextkey ! 89: will return the next key in the database. ! 90: This code will traverse the data base: ! 91: .IP ! 92: .B for ! 93: (key = firstkey(); key.dptr != NULL; key = nextkey(key)) ! 94: .SH DIAGNOSTICS ! 95: All functions that return an ! 96: .I int ! 97: indicate errors with negative values. A zero return indicates ok. ! 98: Routines that return a ! 99: .I datum ! 100: indicate errors with a null (0) ! 101: .I dptr. ! 102: .SH SEE ALSO ! 103: ndbm(3) ! 104: .SH BUGS ! 105: The `.pag' file will contain holes so that its apparent size is about ! 106: four times its actual content. Older UNIX systems may create real ! 107: file blocks for these holes when touched. These files cannot be copied ! 108: by normal means (cp, cat, tp, tar, ar) without filling in the holes. ! 109: .PP ! 110: .I Dptr ! 111: pointers returned by these subroutines point into static storage ! 112: that is changed by subsequent calls. ! 113: .PP ! 114: The sum of the sizes of a key/content pair must not exceed ! 115: the internal block size (currently 1024 bytes). ! 116: Moreover all key/content pairs that hash together must fit on a single block. ! 117: .I Store ! 118: will return an error in the event that a disk block fills with inseparable data. ! 119: .PP ! 120: .I Delete ! 121: does not physically reclaim file space, ! 122: although it does make it available for reuse. ! 123: .PP ! 124: The order of keys presented by ! 125: .I firstkey ! 126: and ! 127: .I nextkey ! 128: depends on a hashing function, not on anything interesting.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.