1480e9923SNik Clayton.\" Copyright (c) 1999 Tim Singletary 2480e9923SNik Clayton.\" No copyright is claimed. 3480e9923SNik Clayton.\" 4480e9923SNik Clayton.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 5480e9923SNik Clayton.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 6480e9923SNik Clayton.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 7480e9923SNik Clayton.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 8480e9923SNik Clayton.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 9480e9923SNik Clayton.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 10480e9923SNik Clayton.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 11480e9923SNik Clayton.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 12480e9923SNik Clayton.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 13480e9923SNik Clayton.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 14480e9923SNik Clayton.\" SUCH DAMAGE. 15480e9923SNik Clayton.\" 16480e9923SNik Clayton.\" $FreeBSD$ 17480e9923SNik Clayton.\" 18480e9923SNik Clayton.\" Note: The date here should be updated whenever a non-trivial 19480e9923SNik Clayton.\" change is made to the manual page. 20480e9923SNik Clayton.Dd July 7, 1999 2195cf33c5SRuslan Ermilov.Dt DBM 3 2295cf33c5SRuslan Ermilov.Os 23480e9923SNik Clayton.Sh NAME 2495cf33c5SRuslan Ermilov.Nm dbm_clearerr , 2595cf33c5SRuslan Ermilov.Nm dbm_close , 2695cf33c5SRuslan Ermilov.Nm dbm_delete , 2795cf33c5SRuslan Ermilov.Nm dbm_dirfno , 2895cf33c5SRuslan Ermilov.Nm dbm_error , 2995cf33c5SRuslan Ermilov.Nm dbm_fetch , 3095cf33c5SRuslan Ermilov.Nm dbm_firstkey , 3195cf33c5SRuslan Ermilov.Nm dbm_nextkey , 3295cf33c5SRuslan Ermilov.Nm dbm_open , 33480e9923SNik Clayton.Nm dbm_store 34480e9923SNik Clayton.Nd database access functions 35480e9923SNik Clayton.Sh SYNOPSIS 3632eef9aeSRuslan Ermilov.In fcntl.h 3732eef9aeSRuslan Ermilov.In ndbm.h 38480e9923SNik Clayton.Ft DBM * 39480e9923SNik Clayton.Fn dbm_open "const char *base" "int flags" "int mode" 40480e9923SNik Clayton.Ft void 41480e9923SNik Clayton.Fn dbm_close "DBM *db" 42480e9923SNik Clayton.Ft int 43480e9923SNik Clayton.Fn dbm_store "DBM *db" "datum key" "datum data" "int flags" 44480e9923SNik Clayton.Ft datum 45480e9923SNik Clayton.Fn dbm_fetch "DBM *db" "datum key" 46480e9923SNik Clayton.Ft int 47480e9923SNik Clayton.Fn dbm_delete "DBM *db" "datum key" 48480e9923SNik Clayton.Ft datum 49480e9923SNik Clayton.Fn dbm_firstkey "DBM *db" 50480e9923SNik Clayton.Ft datum 51480e9923SNik Clayton.Fn dbm_nextkey "DBM *db" 52480e9923SNik Clayton.Ft int 53480e9923SNik Clayton.Fn dbm_error "DBM *db" 54480e9923SNik Clayton.Ft int 55480e9923SNik Clayton.Fn dbm_clearerr "DBM *db" 56480e9923SNik Clayton.Ft int 57480e9923SNik Clayton.Fn dbm_dirfno "DBM *db" 58480e9923SNik Clayton.Sh DESCRIPTION 59480e9923SNik ClaytonDatabase access functions. 60480e9923SNik ClaytonThese functions are implemented using 6195cf33c5SRuslan Ermilov.Xr dbopen 3 62480e9923SNik Claytonwith a 6395cf33c5SRuslan Ermilov.Xr hash 3 64480e9923SNik Claytondatabase. 6595cf33c5SRuslan Ermilov.Pp 6695cf33c5SRuslan Ermilov.Vt datum 67480e9923SNik Claytonis declared in 6895cf33c5SRuslan Ermilov.Aq Pa ndbm.h : 69480e9923SNik Clayton.Bd -literal 70480e9923SNik Claytontypedef struct { 71480e9923SNik Clayton char *dptr; 72480e9923SNik Clayton int dsize; 73480e9923SNik Clayton} datum; 74480e9923SNik Clayton.Ed 7595cf33c5SRuslan Ermilov.Pp 76480e9923SNik Clayton.Fn dbm_open base flags mode 77480e9923SNik Claytonopens or creates a database. 7895cf33c5SRuslan Ermilov.Fa base 7995cf33c5SRuslan Ermilovis the basename of the file containing 80480e9923SNik Claytonthe database; the actual database has a 8195cf33c5SRuslan Ermilov.Pa .db 8295cf33c5SRuslan Ermilovsuffix. 8395cf33c5SRuslan ErmilovI.e., if 84480e9923SNik Clayton.Fa base 85480e9923SNik Claytonis 8695cf33c5SRuslan Ermilov.Qq Li /home/me/mystuff 87480e9923SNik Claytonthen the actual database is in the file 8895cf33c5SRuslan Ermilov.Pa /home/me/mystuff.db . 8995cf33c5SRuslan Ermilov.Fa flags 9095cf33c5SRuslan Ermilovand 9195cf33c5SRuslan Ermilov.Fa mode 9295cf33c5SRuslan Ermilovare passed to 9395cf33c5SRuslan Ermilov.Xr open 2 . 949916c5d2SRuslan Ermilov.Pq Dv O_RDWR | O_CREAT 95480e9923SNik Claytonis a typical value for 9695cf33c5SRuslan Ermilov.Fa flags ; 97480e9923SNik Clayton.Li 0660 98480e9923SNik Claytonis a typical value for 9995cf33c5SRuslan Ermilov.Fa mode . 10095cf33c5SRuslan Ermilov.Dv O_WRONLY 101480e9923SNik Claytonis not allowed in 10295cf33c5SRuslan Ermilov.Fa flags . 103480e9923SNik ClaytonThe pointer returned by 104480e9923SNik Clayton.Fn dbm_open 105480e9923SNik Claytonidentifies the database and is the 106480e9923SNik Clayton.Fa db 107480e9923SNik Claytonargument to the other functions. 108480e9923SNik Clayton.Fn dbm_open 109480e9923SNik Claytonreturns 11095cf33c5SRuslan Ermilov.Dv NULL 111480e9923SNik Claytonand sets 112480e9923SNik Clayton.Va errno 11395cf33c5SRuslan Ermilovif there were any errors. 11495cf33c5SRuslan Ermilov.Pp 115480e9923SNik Clayton.Fn dbm_close db 116480e9923SNik Claytoncloses the database. 117480e9923SNik Clayton.Fn dbm_close 118480e9923SNik Claytonnormally returns zero. 11995cf33c5SRuslan Ermilov.Pp 120480e9923SNik Clayton.Fn dbm_store db key data flags 121480e9923SNik Claytoninserts or replaces an entry in the database. 12295cf33c5SRuslan Ermilov.Fa flags 12395cf33c5SRuslan Ermilovis either 12495cf33c5SRuslan Ermilov.Dv DBM_INSERT 125480e9923SNik Claytonor 12695cf33c5SRuslan Ermilov.Dv DBM_REPLACE . 127480e9923SNik ClaytonIf 128480e9923SNik Clayton.Fa flags 129480e9923SNik Claytonis 13095cf33c5SRuslan Ermilov.Dv DBM_INSERT 131480e9923SNik Claytonand the database already contains an entry for 13295cf33c5SRuslan Ermilov.Fa key , 13395cf33c5SRuslan Ermilovthat entry is not replaced. 13495cf33c5SRuslan ErmilovOtherwise the entry is replaced or inserted. 135480e9923SNik Clayton.Fn dbm_store 136a910f192SDima Dorfmannormally returns zero but returns 1 if the entry could not be 137480e9923SNik Claytoninserted (because 138480e9923SNik Clayton.Fa flags 139480e9923SNik Claytonis 14095cf33c5SRuslan Ermilov.Dv DBM_INSERT , 141480e9923SNik Claytonand an entry with 142480e9923SNik Clayton.Fa key 143480e9923SNik Claytonalready exists) or returns -1 and sets 144480e9923SNik Clayton.Va errno 145480e9923SNik Claytonif there were any errors. 14695cf33c5SRuslan Ermilov.Pp 147480e9923SNik Clayton.Fn dbm_fetch db key 148480e9923SNik Claytonreturns 14995cf33c5SRuslan Ermilov.Dv NULL 150480e9923SNik Claytonor the 151480e9923SNik Clayton.Fa data 152480e9923SNik Claytoncorresponding to 15395cf33c5SRuslan Ermilov.Fa key . 15495cf33c5SRuslan Ermilov.Pp 155480e9923SNik Clayton.Fn dbm_delete db key 156480e9923SNik Claytondeletes the entry for 15795cf33c5SRuslan Ermilov.Fa key . 158480e9923SNik Clayton.Fn dbm_delete 159480e9923SNik Claytonnormally returns zero but returns 1 if there was no entry with 160480e9923SNik Clayton.Fa key 161480e9923SNik Claytonin the database or returns -1 and sets 162480e9923SNik Clayton.Va errno 163480e9923SNik Claytonif there were any errors. 16495cf33c5SRuslan Ermilov.Pp 165480e9923SNik Clayton.Fn dbm_firstkey db 166480e9923SNik Claytonreturns the first key in the database. 167480e9923SNik Clayton.Fn dbm_nextkey db 168480e9923SNik Claytonreturns subsequent keys. 169480e9923SNik Clayton.Fn db_firstkey 170480e9923SNik Claytonmust be called before 171480e9923SNik Clayton.Fn dbm_nextkey . 172480e9923SNik ClaytonThe order in which keys are returned is unspecified and may appear 173480e9923SNik Claytonrandom. 174480e9923SNik Clayton.Fn dbm_nextkey 175480e9923SNik Claytonreturns 17695cf33c5SRuslan Ermilov.Dv NULL 177480e9923SNik Claytonafter all keys have been returned. 17895cf33c5SRuslan Ermilov.Pp 179480e9923SNik Clayton.Fn dbm_error db 180480e9923SNik Claytonreturns the 181480e9923SNik Clayton.Va errno 182480e9923SNik Claytonvalue of the most recent error. 183480e9923SNik Clayton.Fn dbm_clearerr db 184480e9923SNik Claytonresets this value to 0 and returns 0. 18595cf33c5SRuslan Ermilov.Pp 186480e9923SNik Clayton.Fn dbm_dirfno db 187480e9923SNik Claytonreturns the file descriptor to the database. 188480e9923SNik Clayton.Sh SEE ALSO 18995cf33c5SRuslan Ermilov.Xr open 2 , 19095cf33c5SRuslan Ermilov.Xr dbopen 3 , 19195cf33c5SRuslan Ermilov.Xr hash 3 192480e9923SNik Clayton.Sh STANDARDS 193480e9923SNik ClaytonThese functions (except 19495cf33c5SRuslan Ermilov.Fn dbm_dirfno ) 19595cf33c5SRuslan Ermilovare included in the 19695cf33c5SRuslan Ermilov.St -susv2 . 197