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

📄 db.h

📁 UNIX编程高级环境(第二版)的网络套接字部分的程序源码
💻 H
字号:
#include    <sys/types.h>
#include    <sys/stat.h>    /* open() & db_open() mode */
#include    <fcntl.h>        /* open() & db_open() flags */
#include    <stddef.h>        /* NULL */
#include    "ourhdr.h"

        /* flags for db_store() */
#define    DB_INSERT    1        /* insert new record only */
#define    DB_REPLACE    2        /* replace existing record */

        /* magic numbers */
#define    IDXLEN_SZ       4    /* #ascii chars for length of index record */
#define    IDXLEN_MIN       6    /* key, sep, start, sep, length, newline */
#define    IDXLEN_MAX    1024    /* arbitrary */
#define    SEP             ':'    /* separator character in index record */
#define    DATLEN_MIN       2    /* data byte, newline */
#define    DATLEN_MAX    1024    /* arbitrary */

        /* following definitions are for hash chains and free list chain
           in index file */
#define    PTR_SZ           6    /* size of ptr field in hash chain */
#define    PTR_MAX   999999    /* max offset (file size) = 10**PTR_SZ - 1 */
#define    NHASH_DEF     137    /* default hash table size */
#define    FREE_OFF       0    /* offset of ptr to free list in index file */
#define    HASH_OFF  PTR_SZ    /* offset of hash table in index file */

typedef struct {    /* our internal structure */
  int    idxfd;    /* fd for index file */
  int    datfd;    /* fd for data file */
  int    oflag;    /* flags for open()/db_open(): O_xxx */
  char    *idxbuf;/* malloc'ed buffer for index record */
  char    *datbuf;/* malloc'ed buffer for data record*/
  char    *name;    /* name db was opened under */
  off_t    idxoff;    /* offset in index file of index record */
                /* actual key is at (idxoff + PTR_SZ + IDXLEN_SZ) */
  size_t idxlen;/* length of index record */
                /* excludes IDXLEN_SZ bytes at front of index record */
                /* includes newline at end of index record */
  off_t    datoff;    /* offset in data file of data record */
  size_t datlen;/* length of data record */
                /* includes newline at end */
  off_t    ptrval;    /* contents of chain ptr in index record */
  off_t    ptroff;    /* offset of chain ptr that points to this index record */
  off_t    chainoff;/* offset of hash chain for this index record */
  off_t    hashoff;/* offset in index file of hash table */
  int    nhash;    /* current hash table size */
  long    cnt_delok;    /* delete OK */
  long    cnt_delerr;    /* delete error */
  long    cnt_fetchok;/* fetch OK */
  long    cnt_fetcherr;/* fetch error */
  long    cnt_nextrec;/* nextrec */
  long    cnt_stor1;    /* store: DB_INSERT, no empty, appended */
  long    cnt_stor2;    /* store: DB_INSERT, found empty, reused */
  long    cnt_stor3;    /* store: DB_REPLACE, diff data len, appended */
  long    cnt_stor4;    /* store: DB_REPLACE, same data len, overwrote */
  long    cnt_storerr;/* store error */
} DB;

typedef    unsigned long    hash_t;    /* hash values */

            /* user-callable functions */
DB        *db_open(const char *, int, int);
void     db_close(DB *);
char    *db_fetch(DB *, const char *);
int         db_store(DB *, const char *, const char *, int);
int         db_delete(DB *, const char *);
void     db_rewind(DB *);
char    *db_nextrec(DB *, char *);
void     db_stats(DB *);

            /* internal functions */
DB        *_db_alloc(int);
int         _db_checkfree(DB *);
int         _db_dodelete(DB *);
int         _db_emptykey(char *);
int         _db_find(DB *, const char *, int);
int         _db_findfree(DB *, int, int);
int         _db_free(DB *);
hash_t     _db_hash(DB *, const char *);
char    *_db_nextkey(DB *);
char    *_db_readdat(DB *);
off_t     _db_readidx(DB *, off_t);
off_t     _db_readptr(DB *, off_t);
void     _db_writedat(DB *, const char *, off_t, int);
void     _db_writeidx(DB *, const char *, off_t, int, off_t);
void     _db_writeptr(DB *, off_t, off_t);

⌨️ 快捷键说明

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