|
|
1.1 ! root 1: .\" Copyright (c) 1985 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: .\" @(#)ndbm.3 6.8 (Berkeley) 1/2/90 ! 6: .\" ! 7: .TH NDBM 3 "January 2, 1990" ! 8: .UC 6 ! 9: .SH NAME ! 10: dbm_open, dbm_close, dbm_fetch, dbm_store, dbm_delete, dbm_firstkey, dbm_nextkey, dbm_error, dbm_clearerr \- data base subroutines ! 11: .SH SYNOPSIS ! 12: .nf ! 13: .PP ! 14: .ft B ! 15: #include <ndbm.h> ! 16: .PP ! 17: .ft B ! 18: typedef struct { ! 19: char *dptr; ! 20: int dsize; ! 21: } datum; ! 22: .PP ! 23: .ft B ! 24: DBM *dbm_open(file, flags, mode) ! 25: char *file; ! 26: int flags, mode; ! 27: .PP ! 28: .ft B ! 29: void dbm_close(db) ! 30: DBM *db; ! 31: .PP ! 32: .ft B ! 33: datum dbm_fetch(db, key) ! 34: DBM *db; ! 35: datum key; ! 36: .PP ! 37: .ft B ! 38: int dbm_store(db, key, content, flags) ! 39: DBM *db; ! 40: datum key, content; ! 41: int flags; ! 42: .PP ! 43: .ft B ! 44: int dbm_delete(db, key) ! 45: DBM *db; ! 46: datum key; ! 47: .PP ! 48: .ft B ! 49: datum dbm_firstkey(db) ! 50: DBM *db; ! 51: .PP ! 52: .ft B ! 53: datum dbm_nextkey(db) ! 54: DBM *db; ! 55: .PP ! 56: .ft B ! 57: int dbm_error(db) ! 58: DBM *db; ! 59: .PP ! 60: .ft B ! 61: int dbm_clearerr(db) ! 62: DBM *db; ! 63: .SH DESCRIPTION ! 64: These functions maintain key/content pairs in a data base. ! 65: The functions will handle very large (a billion blocks) ! 66: databases and will access a keyed item in one or two file system accesses. ! 67: This package replaces the earlier ! 68: .IR dbm (3x) ! 69: library, which managed only a single database. ! 70: .PP ! 71: .IR Key s ! 72: and ! 73: .IR content s ! 74: are described by the ! 75: .I datum ! 76: typedef. A ! 77: .I datum ! 78: specifies a string of ! 79: .I dsize ! 80: bytes pointed to by ! 81: .I dptr. ! 82: Arbitrary binary data, as well as normal ASCII strings, are allowed. ! 83: The data base is stored in two files. ! 84: One file is a directory containing a bit map and has `.dir' as its suffix. ! 85: The second file contains all data and has `.pag' as its suffix. ! 86: .PP ! 87: Before a database can be accessed, it must be opened by ! 88: .IR dbm_open . ! 89: This will open and/or create the files ! 90: .IB file .dir ! 91: and ! 92: .IB file .pag ! 93: depending on the flags parameter (see ! 94: .IR open (2)). ! 95: .PP ! 96: Once open, the data stored under a key is accessed by ! 97: .I dbm_fetch ! 98: and data is placed under a key by ! 99: .IR dbm_store . ! 100: The ! 101: .I flags ! 102: field can be either ! 103: .B DBM_INSERT ! 104: or ! 105: .B DBM_REPLACE. ! 106: .B DBM_INSERT ! 107: will only insert new entries into the database and will not ! 108: change an existing entry with the same key. ! 109: .B DBM_REPLACE ! 110: will replace an existing entry if it has the same key. ! 111: A key (and its associated contents) is deleted by ! 112: .IR dbm_delete . ! 113: A linear pass through all keys in a database may be made, ! 114: in an (apparently) random order, by use of ! 115: .I dbm_firstkey ! 116: and ! 117: .IR dbm_nextkey . ! 118: .I Dbm_firstkey ! 119: will return the first key in the database. ! 120: .I Dbm_nextkey ! 121: will return the next key in the database. ! 122: This code will traverse the data base: ! 123: .IP ! 124: .B for ! 125: (key = dbm_firstkey(db); key.dptr != NULL; key = dbm_nextkey(db)) ! 126: .PP ! 127: .I Dbm_error ! 128: returns non-zero when an error has occurred reading or writing the database. ! 129: .I Dbm_clearerr ! 130: resets the error condition on the named database. ! 131: .SH DIAGNOSTICS ! 132: All functions that return an ! 133: .I int ! 134: indicate errors with negative values. A zero return indicates ok. ! 135: Routines that return a ! 136: .I datum ! 137: indicate errors with a null (0) ! 138: .I dptr. ! 139: If ! 140: .IR dbm_store ! 141: called with a ! 142: .I flags ! 143: value of ! 144: .B DBM_INSERT ! 145: finds an existing entry with the same key ! 146: it returns 1. ! 147: .SH BUGS ! 148: The `.pag' file will contain holes so that its apparent size is about ! 149: four times its actual content. Older UNIX systems may create real ! 150: file blocks for these holes when touched. These files cannot be copied ! 151: by normal means (cp, cat, tp, tar, ar) without filling in the holes. ! 152: .PP ! 153: .I Dptr ! 154: pointers returned by these subroutines point into static storage that is ! 155: changed by subsequent calls. This storage is not necessarily aligned; ! 156: stored ``longs'', for example, should be copied to a properly aligned ! 157: block of memory before being accessed. ! 158: .PP ! 159: The sum of the sizes of a key/content pair must not exceed ! 160: the internal block size (currently 1024 bytes). ! 161: Moreover all key/content pairs that hash together must fit on a single block. ! 162: .I Dbm_store ! 163: will return an error in the event that a disk block fills with inseparable data. ! 164: .PP ! 165: .I Dbm_delete ! 166: does not physically reclaim file space, ! 167: although it does make it available for reuse. ! 168: .PP ! 169: The order of keys presented by ! 170: .I dbm_firstkey ! 171: and ! 172: .I dbm_nextkey ! 173: depends on a hashing function, not on anything interesting. ! 174: .SH SEE ALSO ! 175: dbm(3X)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.