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

📄 db.h

📁 unix高级编程源代码.<<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 + -